2010-12-29 4 views
1

J'ai un $ _POST qui envoie un tableau. Et j'ai un tableau prévoious avec une clé qui pourrait contenir ou pas une des valeurs de $ _POST.Comparer un tableau multidimensionnel avec un tableau simple et extraire la différence

Par exemple:

$_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)) 

donc je dois vérifier si les $ _POST iTMS existe déjà sur le tableau previuos ([id_collection] clé) et extraire les nouveaux (dans ce cas [1] => 10 [2] => 52) à ve ajouté à la base de données et aussi obtenir ceux qui ont changé qui doivent être supprimés de la base de données (remplacé) par les nouvelles valeurs.

Ce mon code actuel mais ne fonctionne pas bien ...

  $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]); 
         } 
        } 
       } 
      } 

NOTE: old_nodes est "Précédent" et est "$ _POST"

+0

A quoi ressemblerait le tableau après avoir ajouté '[1] => 10 [2] => 52'? Sont-ils en train de devenir un nouveau sous-réseau ou sont-ils ajoutés à l'un des sous-réseaux? –

Répondre

0

collections $ Essayez quelque chose comme ceci:

$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); 
Questions connexes