Многомерное объединение массивов в PHP - PullRequest
0 голосов
/ 04 мая 2020

Запросите вашу помощь о том, как объединить многомерный ассоциативный массив, как показано ниже, опробовал приведенную ниже функцию, и каждый из них дает разные неправильные выходные данные, а требуемый вывод такой же, как показано ниже («Требуемый массив). И ключ» [Сервер] "имя остается одинаковым для всех массивов, но с разными значениями.

Функции

$output = array_merge(Array1,Array2,Array3);
$output = array_merge_recursive(Array1,Array2,Array3);
$output = array_replace_recursive(Array1,Array2,Array3);

foreach($Array1 as $a) { $output[$a["Server"]][] = $Count; }
foreach($Array2 as $b) { $output[$b["Server"]][] = $Rack; }
foreach($Array3 as $b) { $output[$b["Server"]][] = $Node; }

Array1:

Array
(
    [0] => Array
        (
            [Server] => Server1
            [Count] => 1
        )

    [1] => Array
        (
            [Server] => Server2
            [Count] => 4
        )

    [2] => Array
        (
            [Server] => Server3
            [Count] => 4
        )
)

Array2:

Array
(
    [0] => Array
        (
            [Server] => Server2
            [Rack] => 1
        )

    [1] => Array
        (
            [Server] => Server4
            [Rack] => 4
        )

    [2] => Array
        (
            [Server] => Server5
            [Rack] => 4
        )
)

Array3:

Array
(
    [0] => Array
        (
            [Server] => Server2
            [Node] => 1
        )

    [1] => Array
        (
            [Server] => Server5
            [Node] => 4
        )

    [2] => Array
        (
            [Server] => Server6
            [Node] => 4
        )
)

Требуемый выход массива

Array
(
    [0] => Array
        (
            [Server] => Server1
            [Count] => 1
            [Rack] => 0
            [Node] => 0
        )
    [1] => Array
        (
            [Server] => Server2
            [Count] => 4
            [Rack] => 1
            [Node] => 1
        )

    [2] => Array
        (
            [Server] => Server3
            [Count] => 4
            [Rack] => 0
            [Node] => 0
        )

    [3] => Array
        (
            [Server] => Server4
            [Count] => 0
            [Rack] => 4
            [Node] => 0
        )

    [4] => Array
        (
            [Server] => Server5
            [Count] => 0
            [Rack] => 4
            [Node] => 4
        )

    [5] => Array
        (
            [Server] => Server6
            [Count] => 0
            [Rack] => 0
            [Node] => 4
        )
)

От, Вино

1 Ответ

2 голосов
/ 04 мая 2020

Вы можете индексировать их по Server, и тогда они объединятся в один и тот же ключ:

$output = array_merge(array_column($array1, null, 'Server'),
                      array_column($array2, null, 'Server'),
                      array_column($array3, null, 'Server'));

Не обязательно, но если вы хотите вернуться к целочисленным ключам, то:

$output = array_values($output);

Чтобы добавить недостающие ключи, вам нужно объединить массив шаблонов:

$keys = ['Server' => 0, 'Count' => 0, 'Rack' => 0, 'Node' => 0];

foreach($output as &$values) {
    $values = array_merge($keys, $values);
}    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...