2010-12-29 7 views
1

Ich habe ein $ _POST, das ein Array sendet. Und ich habe ein previous Array mit einem Schlüssel, der einen der Werte von $ _POST enthalten kann oder nicht.Vergleichen Sie ein mehrdimensionales Array mit einem einfachen Array und extrahieren Sie den Unterschied

Beispiel:

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

Also muss ich, wenn die $ _POST itms bereits auf dem previuos Array besteht überprüfen ([Gruppe objekt] -Taste) und die neuen extrahieren (in diesem Fall [1] => 10 [2] => 52) hinzugefügt ve zur Datenbank und auch diejenigen, die sich geändert haben, müssen aus der Datenbank entfernt (ersetzt) ​​werden durch die neuen Werte.

Das ist meine aktuellen Code aber nicht gut funktioniert ...

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

HINWEIS: old_nodes ist "Zurück" und $ Sammlungen "$ _POST"

+0

Wie würde das Array nach dem Hinzufügen von '[1] => 10 [2] => 52' aussehen? Werden sie zu einem neuen Subarray oder werden sie zu einem der Subarrays hinzugefügt? –

Antwort

0

Probieren Sie etwas wie folgt aus:

$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); 
Verwandte Themen