PHP: добавить недостающие ключи между массивами - PullRequest
0 голосов
/ 20 мая 2019

У меня есть следующие значения ключей массива:

$arrData = array
(
    array(
        'a' => 'test',
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    ),
    array(
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    ),
    array(
        'b' => 'test2',
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    )
);

Так что здесь мне нужно объединить массив в один с объединением отсутствующих ключей с массивом с одним значением.Может кто-нибудь, пожалуйста, помогите получить следующий вывод в одном массиве?

$arrData = array
(
    array(
        'a' => 'test',
        'b' => 'test2',
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    )
);

Заранее спасибо!

Ответы [ 4 ]

6 голосов
/ 20 мая 2019

Просто объедините их, а затем сортируйте по ключу:

$arrData = array_merge(...$arrData);
ksort($arrData);

Вместо ... вы можете использовать:

$arrData = call_user_func_array('array_merge', $arrData);

Если вы действительно хотите, чтобы результат был многомерным, то:

$arrData = [$arraData];
//or
$arrData = array($arrData);
5 голосов
/ 20 мая 2019

Вы можете использовать array_reduce (или простой цикл foreach), чтобы объединить каждое из последующих значений массива с первым:

$out = array_reduce($arrData, function ($c, $v) { return array_merge($c, $v); }, array());
print_r($out);

$out = array();
foreach ($arrData as $arr) {
    $out = array_merge($out, $arr);
}
print_r($out);

Вывод (для обоих примеров):

Array (
  [a] => test
  [c] => 1
  [d] => 2
  [e] => B
  [b] => test2 
)

Если вы хотите сохранить ключи в алфавитном порядке, вы можете использовать ksort:

ksort($out);
print_r($out);

Array (
  [a] => test
  [b] => test2 
  [c] => 1
  [d] => 2
  [e] => B
)

Демонстрация на 3v4l.org

1 голос
/ 20 мая 2019

Использование array_walk и ksort

$res=[];
array_walk($arrData, function($v,$k) use(&$res){
  $res = array_merge($res,$v);
});
ksort($res);

OR

Вы можете использовать foreach и array_column

$keys = ['a','b','c','d','e'];
$res=[];
foreach($keys as $val){
   $res[$val] = array_column($arrData, $val)[0];
}
print_r($res);

Демонстрационная версия

0 голосов
/ 20 мая 2019
<?php
  $arrData = array
(
    array(
        'a' => 'test',
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    ),
    array(
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    ),
    array(
        'b' => 'test2',
        'c' => 1,
        'd' => 2,
        'e' => 'B'
    )
);

$result_array = array();
foreach($arrData as $ad){

    foreach($ad as $key=>$value){


        if(!array_key_exists($key,$result_array)){
            $result_array[$key] = $value;
        }

    }
}

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