PHP: Как инициализировать ячейки в двумерном массиве со всеми существующими ключами, чтобы все строки имели одинаковое количество элементов - PullRequest
0 голосов
/ 06 июня 2018

Данный пример массива с динамическими ключами (заранее не известен):

[
  ["blep" => 32, "blip" => 42],
  ["blap" => 99, "blep" => null],
  ["lel" => "hulo"]
]

Я хотел бы получить такой вывод:

[
  ["blap" => null, "blep" => 32, "blip" => 42,  "lel" => null],
  ["blap" => 99, "blep" => null, "blip" => null, "lel" => null],
  ["blap" => null, "blep" => null, "blip" => null, "lel" => "hulo"]
]

Как бы ядостичь этого?Должен ли я просто зацикливаться на элементах массива, чтобы получить все существующие ключи, а затем повторно зацикливаться на этих элементах, чтобы объявить ключи, которые не объявлены в элементе?Нет лучшего способа?

Спасибо!

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Попробуйте это.

    $collection = collect([
        ["blep" => 32, "blip" => 42],
        ["lel" => "hulo"]
    ]);


    $existsKeys = collect(['blap'=>null, 'blep'=>null, 'blip'=>null, 'lel'=>null]);
    $newCollection = $collection->map(function($item, $key) use ($existsKeys) {
        $diff = $existsKeys->diffKeys($item);
        return collect($item)->merge($diff);
    });

    dd( $newCollection );

Для получения дополнительной информации, пожалуйста, ознакомьтесь с документацией .

0 голосов
/ 06 июня 2018
<?php
$array=[
    ["blep" => 32, "blip" => 42],
    ["blap" => 99, "blep" => null],
    ["lel" => "hulo"]
];

$counter=0;
foreach($array as $data){
    isset($data['blep'])?true:$array[$counter]['blep']=null;
    isset($data['blip'])?true:$array[$counter]['blip']=null;
    isset($data['blap'])?true:$array[$counter]['blap']=null;
    isset($data['lel'])?true:$array[$counter]['lel']=null;
    $counter++;
}

echo '<pre>';
print_r($array);

Этот код будет проходить через ваш массив и, если он найдет уже установленное значение, сохранит его, иначе добавит новое поле массива со значением null.В конце цикла все вложенные массивы будут иметь одинаковые поля.

Вывод:

Array
(
    [0] => Array
        (
            [blep] => 32
            [blip] => 42
            [blap] => 
            [lel] => 
        )

    [1] => Array
        (
            [blap] => 99
            [blep] => 
            [blip] => 
            [lel] => 
        )

    [2] => Array
        (
            [lel] => hulo
            [blep] => 
            [blip] => 
            [blap] => 
        )

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