0
私は$ oldと$ newという2つの多次元配列を持っています。私は2つの配列を比較し、新しいキー=>値を配列new $ newに追加したいと思っています。k => vは2つの間でnewを追加、削除、または変更しました。2つの配列間に新しい/削除/変更されたキー=>値のペアを設定します
これらは配列です:
$old = array(
array('id'=> 111,'color'=> 'blue'),
array('id'=> 112,'color'=> 'red'),
array('id'=> 113,'color'=> 'black'),
array('id'=> 114,'color'=> 'smoke')
);
$new = array(
array('id'=> 111,'color'=> 'green'),
array('id'=> 112,'color'=> 'red'),
array('id'=> 113,'color'=> ''),
array('color'=> 'new color')
);
私は古い新しい2配列を、チェックして、新しい配列$ end_resultを返したいです。
私が書く$end_result = array(
array('id'=> 111,'color'=> 'green','action'=>'changed'),
array('id'=> 112,'color'=> 'red','action'=>''),
array('id'=> 113,'color'=> '','action'=>'remove'),
array('color'=> 'new color','action'=>'new'),
array('id'=> 114,'color'=> 'smoke','action'=>'remove')
);
:
$newarray = array();
foreach ($new as $key_new => $value_new) {
$newarray[$key_new] = $value_new;
if(!isset($value_new['id'])){
$newarray[$key_new]['action'] = 'new';
}else {
foreach ($old as $key_old => $value_old) {
if($value_new['id'] == $value_old['id']){
if(empty($value_new['color'])){
$newarray[$key_new]['action'] = 'remove';
}else {
if($value_new['color'] != $value_old['color']){
$newarray[$key_new]['action'] = 'changed';
}
}
}
}
}
}
echo json_encode($newarray);
//result: [{"id":111,"color":"green","action":"changed"},{"id":112,"color":"red"},{"id":113,"color":"","action":"remove"},{"color":"new color","action":"new"}]
しかし!古い配列のキーID 114を確認し、$ newarrayでアクション "remove"を設定する方法
ありがとう!
紹介文を改めてください。私はあなたの望む結果を理解するのが非常に困難です。たぶん、 '$ end_result = array();'のような配列として目的の結果を投稿する方が簡単かもしれません – MonkeyZeus
私は$ end_resultを更新しました。コメントありがとう。 – user1828959