Объединить значения под-массива в один массив с массивом - PullRequest
1 голос
/ 08 апреля 2019

Я не могу правильно сформулировать эту проблему, поэтому вот что я пытаюсь достичь.

array { 
    [0]=> { 
        ["Abilities"]=> { ["Numerical"]=> 3 } 
    } 
    [1]=> { 
        ["Abilities"]=> { ["Verbal"]=> 1 } 
    } 
    [2]=> { 
        ["Domain"]=> { ["Programming"]=> 0 } 
    } 
} 

до

array { 
    [0]=> { 
        ["Abilities"]=> { ["Numerical"]=> 3 ["Verbal"]=> 1 } 
    } 
    [1]=> { 
        ["Domain"]=> { ["Programming"]=> 0 } 
    } 
} 

Я получаю этот массив из внешнего источника, поэтому мне нужно оптимизироватьэтот способ использовать его.

1 Ответ

0 голосов
/ 08 апреля 2019

Массив, который вы получаете из внешнего источника, похож на набор отдельных веток, которые вам нужно объединить в одно дерево.Вы можете использовать рекурсивную функцию, чтобы создать «оптимизированную» структуру, к которой вы стремитесь.Рекурсивный подход должен работать независимо от глубины каждой ветви.

function merge_branches(array $branches): array
{
    $merge = function ($node, &$tree) use (&$merge) {
        if (is_array($value = reset($node))) {
            $merge($value, $tree[key($node)]);        // merge branch node recursively
        } else {
            $tree[key($node)] = $value;               // set leaf node to value
        }
    };

    $tree = [];
    foreach ($branches as $branch) {
        $merge($branch, $tree);
    }
    return $tree;
}

$optimized = merge_branches($external);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...