2016-10-10 6 views
0

$sort配列で$object['data']をソートしようとしています。キーがオブジェクトに存在しない場合、問題は、私はそれをそれを追加し、設定したいされて0antoherに基づいて配列をソートし、存在しない場合はキーを追加します。

$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をループで試しましたが、実際には運がありませんでした。

+0

このロジックを生の配列に実装しようとすると、つまり 'json_encode()'関数を適用する前にもっと簡単になるでしょう。このロジックをJSON文字列に組み込むのは高価です。 –

+0

@RajdeepPaul私はコードを編集しました – mchev

+0

私は以下の回答を与えました。うまくいけば、あなたの問題を解決します。 –

答えて

0

と仮定$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); 

はここlive demoです。

+0

ありがとうございます。 – mchev

+0

@mchev喜んで私は助けることができました。 *乾杯! : - )* –

関連する問題