Сортировка массива на основе antoher и добавление ключа, если он не существует

#php #arrays #sorting

#php #массивы #сортировка

Вопрос:

Пытаюсь выполнить сортировку $object['data'] с $sort помощью массива. Проблема в том, что если ключ не существует в объекте, я хотел бы добавить его и установить для него значение 0.

 $sort = ['label1', 'label2', 'label3', 'label4', 'label5'] /* Could be everything */
  

Фактический объект:

 $object = [ array(
  "id"=>1,
  "name"=>"john",
  "data"=> ["label3"=>15, "label5"=>2]
), array(
  "id"=> 2,
  "name"=> "jane",
  "data"=> ["label1"=> 8, "label2"=>9, "label5"=>3]
)];
  

Желаемый объект:

 $object = [ array(
  "id"=>1,
  "name"=>"john",
  "data"=> ["label1"=>0, "label2"=>0, "label3"=>15, "label4"=>0, "label5"=>2]
), array(
  "id"=> 2,
  "name"=> "jane",
  "data"=> ["label1"=>8, "label2"=>9, "label3"=>0, "label4"=>0, "label5"=>3]
)];
  

Я пробовал с array_key_exists помощью циклов in, но на самом деле безуспешно.

Комментарии:

1. Было бы намного проще, если бы вы могли попытаться реализовать эту логику в необработанном массиве, т.Е. Перед применением json_encode() функции, было бы намного проще. Включение этой логики в строку JSON было бы дорогостоящим.

2. @RajdeepPaul я отредактировал код

3. Я дал ответ ниже, надеюсь, это решит вашу проблему.

Ответ №1:

Предположим $object , что это ваш исходный массив, и $sort это массив, с которым вы хотите манипулировать исходным массивом, решение будет таким:

 function mergeArrays($array1, $array2){
    $newArray = array();
    foreach($array1 as $v){
        if(!array_key_exists($v, $array2)){
            $newArray[$v] = 0; 
        }else{
            $newArray[$v] = $array2[$v]; 
        }
    }
    return $newArray;
}

foreach($object as $key => $array){
    $object[$key]['data'] = mergeArrays($sort, $array['data']);
}

// display $object array
var_dump($object);
  

Вот живая демонстрация.

Комментарии:

1. @mchev Рад, что смог помочь. Приветствия! 🙂