#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 Рад, что смог помочь. Приветствия! 🙂