2010-12-29 6 views
1

配列を送信する$ _POSTがあります。そして私は、prehious配列を持っていますが、これは$ _POSTの値を含むか含まないキーを含んでいます。例については多次元配列を単純な配列と比較し、その差を抽出します。

$_post: Array ([0] => 13 [1] => 10 [2] => 52) 
Previous: Array ([0] => Array ([collection_id] => 13 [artwork_id] => 21) 
        [1] => Array ([collection_id] => 11 [artwork_id] => 21)) 

だから私は$ _POST ITMSはすでにpreviuos配列([collection_id]キー)上に存在するかどうかを確認して、コメントを追加しました(この場合[1] => 10 [2] => 52で)新しいものを抽出する必要がありますまた、変更されたものを新しい値でデータベースから削除(置換)する必要があります。

この私の現在のコードが、うまく機能していない...

  $new_nodes = array(); 

      $i = 0; 
      foreach($old_nodes as $node){ 
       foreach ($collections as $collection) { 
        $new = array('collection_id' => $collection, 'artwork_id' => $artwork['id']); 
        if(array_diff($node, $new)){ 
         if($collection > 0){ 
          array_push($new_nodes, $new); 
         } 
        } 
        else{ 
         unset($old_nodes[$i]); 
        } 
       } 
       $i++; 
      } 


      foreach($new_nodes as $node){ 
       for ($i = 0; $i <= count($new_nodes); $i++) { 
        if(isset($new_nodes[$i])){ 
         if(!array_diff($node, $new_nodes[$i])){ 
          unset($new_nodes[$i]); 
         } 
        } 
       } 
      } 

注:old_nodesは "前" で、$コレクションである "$ _POST"

+0

'[1] => 10 [2] => 52'を追加した後の配列はどのように見えますか?彼らは新しいサブアレイになっていますか、それともサブアレイの1つに追加されていますか? –

答えて

0

このような何か試してみてください:

$old_nodes = array(); 
$new_nodes = array(); 
$del_nodes = array(); 

foreach ($collections as $collection) { 
    array_push($old_nodes, $collection['collection_id']); 
} 

$new_nodes = array_diff($collections, $old_nodes); 

$del_nodes = array_diff($old_nodes, $collections);