2014-09-18 8 views
6

ich dieses Array haben:PHP löschen Sub-Array von mehrdimensionalen Arrays von Sub-Array-Schlüsselwert

array(5) { 
    [0]=> 
    array(4) { 
    ["nachricht"]=> 
    string(9) "blablaaaa" 
    ["user"]=> 
    string(15) "334607943355808" 
    ["datum"]=> 
    string(16) "18.09.2014 11:13" 
    ["deleted"]=> 
    string(0) "" 
    } 
    [1]=> 
    array(4) { 
    ["nachricht"]=> 
    string(3) "joo" 
    ["user"]=> 
    string(15) "334607943355808" 
    ["datum"]=> 
    string(16) "18.09.2014 11:56" 
    ["deleted"]=> 
    string(15) "334607943355808" 
    } 
    [2]=> 
    array(4) { 
    ["nachricht"]=> 
    string(4) "noma" 
    ["user"]=> 
    string(15) "334607943355808" 
    ["datum"]=> 
    string(16) "18.09.2014 11:56" 
    ["deleted"]=> 
    string(0) "" 
    } 
    [3]=> 
    array(4) { 
    ["nachricht"]=> 
    string(4) "test" 
    ["user"]=> 
    string(15) "334607943355808" 
    ["datum"]=> 
    string(16) "18.09.2014 11:56" 
    ["deleted"]=> 
    string(0) "" 
    } 
    [4]=> 
    array(4) { 
    ["nachricht"]=> 
    string(4) "doh!" 
    ["user"]=> 
    string(15) "334607943355808" 
    ["datum"]=> 
    string(16) "18.09.2014 11:56" 
    ["deleted"]=> 
    string(0) "" 
    } 
} 

Ich möchte alle Subarrays löschen, die den Wert 334607943355808 im Schlüssel "gelöscht" sind in das Unterfeld. Ich habe diesen Code:

if(($key = array_search("334607943355808", $array)) !== false) { 
      unset($array[$key]); 
     } 

aus: PHP array delete by value (not key) wo es nicht Multi-Array ist, aber wie kann ich es in meinem Fall?

EDIT:

Ich habe versucht es auf diese Weise jetzt:

foreach($array as $delete){ 
     if(($key = array_search("334607943355808", $delete)) !== false) { 
       unset($delete[$key]); 
     } 
} 

Aber es funktioniert nicht

+0

Sie Rekursion benötigen verwenden können. –

+1

Verwenden Sie eine verschachtelte foreach-Schleife und überprüfen Sie die Werte, um zu sehen, ob sie Ihre Nummer enthalten? – TheOneWhoSighs

+0

nicht so flexibel, aber in diesem Fall wird es genauso gut funktionieren. –

Antwort

5

Nur ein einfaches foreach mit einem Verweis auf die Unterfeld:

foreach($array as &$sub_array) { 
    if($sub_array['deleted'] == '334607943355808') { 
     $sub_array = null; 
     break; //if there will be only one then break out of loop 
    } 
} 

Oder durch Schlüssel im Hauptfeld:

foreach($array as $key => $sub_array) { 
    if($sub_array['deleted'] == '334607943355808') { 
     unset($array[$key]); 
     break; //if there will be only one then break out of loop 
    } 
} 

könnten Sie extrahieren auch die deleted Werte, suchen und ungesetzt durch Schlüssel:

if(($key = array_search('334607943355808', 
         array_column($array, 'deleted'))) !== false) { 
    unset($array[$key]); 
} 
+1

Empfehlen Sie eine 'break;' nach 'unset (...)', um unnötige Schleifen zu vermeiden. – Fr0zenFyr

0

Sie array_map() .try diese

$finalArr = array_map(function($v){ 
    if($v['deleted'] == '334607943355808') unset($v['deleted']); 
    return $v; 
}, $arr); 
Verwandte Themen