Слияние многомерного массива в PHP - PullRequest
0 голосов
/ 28 июня 2019

У меня есть 2 массива, как показано ниже (Array-1, Array-2), и я хотел объединить их в один массив, как показано ниже (New-Array), основываясь на условии ниже

Вклад: (если Массив-1 (hID) = Массив-2 (hID), то мегр, как показано ниже)

Массив-1

Array
(
    [0] => Array
        (
            [hID] => 107
            [env] => DEV
            [serv] => server1
        )

    [1] => Array
        (
            [hID] => 122
            [env] => DEV
            [serv] => server2
        )

Массив-2

Array
(
    [107] => Array
        (
            [hID] => 107
            [cpu] => 32
            [mem] => 24
        )

    [122] => Array
        (
            [hID] => 122
            [cpu] => 16
            [mem] => 24
        )

New-массив

Array
(
    [0] => Array
        (
            [hID] => 107
            [env] => DEV
            [serv] => server1
            [cpu] => 32
            [mem] => 24
        )

    [1] => Array
        (
            [hID] => 122
            [env] => DEV
            [serv] => server2
            [cpu] => 16
            [mem] => 24
        )

Ответы [ 3 ]

0 голосов
/ 28 июня 2019

Если второй массив всегда имеет те же ключи, что и значения hID, то вы можете сделать следующее:

$newArray = [];
foreach ($array1 as $item) {
    if (isset($array2[$item['hID']])) {
        $newArray[] = array_merge($item, $array2[$item['hID']]);
    }
}

Или вы всегда можете создать такой массив (ключ такой же, какзначение hID) с:

$array2 = array_combine(
    array_column($array2, 'hID'),
    $array2
);
0 голосов
/ 28 июня 2019

Вы можете попробовать это:

Тестовые массивы :

$array_1 = [
    0 => [
        "hID" => 107,
        "env" => "DEV",
        "serv" => "server1"
    ],
    1 => [
        "hID" => 122,
        "env" => "DEV",
        "serv" => "server2"
    ] 
];

$array_2 = [
    0 => [
        "hID" => 107,
        "cpu" => 32,
        "mem" => 24
    ],
    1 => [
        "hID" => 122,
        "cpu" => 16,
        "mem" => 24
    ] 
];

Код для объединения обоих массивов :

$new_array = [];
 for($i=0;$i<count($array_1);$i++) {
    for($j=0;$j<count($array_2);$j++) {
        if ($array_1[$i]['hID'] === $array_2[$j]['hID']) {
            $new_array[] = array_merge($array_1[$i], $array_2[$j]);
        }
    }
 }

Выход:

 var_dump($new_array);

array(2) {
  [0]=>
  array(5) {
    ["hID"]=>
    int(107)
    ["env"]=>
    string(3) "DEV"
    ["serv"]=>
    string(7) "server1"
    ["cpu"]=>
    int(32)
    ["mem"]=>
    int(24)
  }
  [1]=>
  array(5) {
    ["hID"]=>
    int(122)
    ["env"]=>
    string(3) "DEV"
    ["serv"]=>
    string(7) "server2"
    ["cpu"]=>
    int(16)
    ["mem"]=>
    int(24)
  }
}

Тест здесь: http://sandbox.onlinephpfunctions.com/

0 голосов
/ 28 июня 2019
if($array1[hID] == $array2[hID]){

$ Array3 = array_merge ($ array1, $ array2); }

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...