2017-02-07 1 views
0

Zum Beispiel habe ich folgendes mehrdimensionales Array (ein Array von assoziativer Arrays):Gibt es eine native PHP-Methode, die die Zeile eines mehrdimensionalen Arrays löscht?

array(
[0]=> (array('key01'=>'value01', 'key02'=>'value02')), 
[1]=> (array('key11'=>'value11', 'key12'=>'value12')), 
[2]=> (array('key21'=>'value21', 'key22'=>'value22')), 
... 
[N]=> (array('keyN1'=>'valueN1','keyN2'=>'valueN2')) 
); 

ich für eine native Methode suche (falls vorhanden), die einen Wert in dem Array zu finden und die entsprechende Zeile entfernen . Zum Beispiel würde i Reihe entfernen, den Wert value21 enthält, ist das resultierende Array des folgenden:

array(
[0]=> (array('key01'=>'value01', 'key02'=>'value02')), 
[1]=> (array('key11'=>'value11', 'key12'=>'value12')), 
... 
[N]=> (array('keyN1'=>'valueN1','keyN2'=>'valueN2')) 
); 

können

+3

ist es nicht möglich. Schleife über Array und verwenden 'unset' –

+0

Nein, ist es nicht im Zusammenhang db ... – bobc82

+0

Nicht eine einzige Funktion nicht, aber viele Einzeiler, dass Kettenfunktionen, zB' array_filter ($ array, function ($ innerArray) {return in_array ("Suchwert", $ innerArray);}); ' – apokryfos

Antwort

1

Sie verwenden array_filter (i für Schleifen nicht möglich, wenn ... verwenden würde)() mit Schließung, um dies zu erreichen.

$myArr = array(
      array('key01'=>'value01', 'key02'=>'value02'), 
      array('key11'=>'value11', 'key12'=>'value12'), 
      array('key21'=>'value21', 'key22'=>'value22'), 
    ); 


    $finalArr = array_filter($myArr,function($val1){ 
         $flag = true; 
         array_filter($val1,function($val2) use(&$flag){ 
           if($val2 == 'value21'){ 
            $flag=false; 
           } 
         }); 

         return $flag; 
       }); 

    $finalArr = array_values($finalArr); // to get the array numerically indexed in order 

Aber ich werde sagen, dass ein verschachteltes foreach mit unset() tut fast ähnlich ist. Ich hoffe es hilft.

Edit:

in_array() in der Schließung ist viel einfacher

$finalArr = array_filter($myArr,function($val1){ 
        return ! in_array("value21",$val1); 
      }); 

Denken Sie auch daran, dass es keine hier eher Lambda Verwendung des Verschlusses ist, beide anonyme Funktionen sind.

+0

Warum nicht 'return in_array ('value21', $ val1);' innerhalb der Schließung verwenden? – zenko

+0

können Sie das absolut verwenden, ich genoss einfach geschachtelte array_filter() schreiben und wurde aufgeholt, das wäre das sogar einfach. Ich habe meine Antwort mit in_array() bearbeitet, aber erinnere dich jetzt daran, dass die Schließung weg ist und wir Lambda im ursprünglichen array_filter() verwenden –

Verwandte Themen