как я могу реструктурировать ассоциативный массив, используя цикл PHP foreach (или нет)?

#php #arrays #loops #foreach #associative

#php #массивы #циклы #foreach #ассоциативный

Вопрос:

итак, вот первый ключ ассоциативного массива с именем $results:

 [
    10 (2) => [
        step (3) => [
            0 (1) => [
                id => 1
            ],
            1 (1) => [
                id => 2
            ],
            2 (1) => [
                id => 3
            ]
        ],
        status (3) => [
            0 (1) => [
                id => 2
            ],
            1 (1) => [
                id => 4
            ],
            2 (1) => [
                id => 10
            ]
        ]
    ], 

Я бы хотел переструктурировать его, чтобы он выглядел так:

 [
    10 (2) => [
        step (1) => [
            0 (1) => [
                id => 1
            ],
        status (1) =>[
            0 (1) => [
                id => 2
            ],
        step (1) => [
            0 (1) => [
                id => 2
            ],
        status (1) =>[
            0 (1) => [
                id => 4
            ],
            
          AND SO ON...
            

короче говоря, я просто хочу отобразить step amp; status в виде пары для каждого шага и в результате получить [step, status], [step, status], [step, status] … ассоциативный массив. На данный момент массив больше похож на [шаг, шаг шага], [статус, статус, статус].

Вот мой начальный цикл foreach, который дал мне массив в первую очередь :

 $results = [];

        foreach ($entities['node'] as $nodeIdBis => $nodeWkf) {

            $nodeWkfTmp = ["step" => [], "status" => []];
            
            foreach ($nodeWkf as $wkfId => $subNodeWkf) {

                foreach ($subNodeWkf as $stepId => $nodeStatus) {

                    $nodeWkfTmp["status"][] = ["id" => $nodeStatus['statusId']];
                    $nodeWkfTmp["step"][]  = ["id" => $stepId];
                }
            }
            $results[$nodeIdBis] = $nodeWkfTmp;
        } 

большое уважение к тому, кто найдет трюк 🙂

Ответ №1:

Просто измените назначение массива $nodeWkfTmp, чтобы получить массив пар [шаг, статус]:

 $nodeWkfTmp = [];
 
 $nodeWkfTmp[] = [
  "status" => ["id" => $nodeStatus['statusId']],
  "step"   => ["id" => $stepId]
];