2014-09-18 15 views
6

Ho questa matrice:PHP cancellare sub-array da array multidimensionale da sub-array valore chiave

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) "" 
    } 
} 

voglio cancellare tutti i sub-array che comprendono il valore 334.607.943.355.808 nella chiave "eliminata" in il sottoarray. Ho ottenuto questo codice:

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

da: PHP array delete by value (not key) dove è non multi-array, ma come posso farlo nel mio caso?

EDIT:

Ho provato in questo modo la società:

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

ma non sta lavorando

+0

è necessario ricorsione. –

+1

Utilizzare un ciclo foreach nidificato e controllare i valori per vedere se contengono il proprio numero? – TheOneWhoSighs

+0

non è flessibile, ma in questo caso funzionerà altrettanto bene. –

risposta

5

Basta un semplice foreach con un riferimento al sub matrice:

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 
    } 
} 

Oppure tramite la chiave dell'array principale:

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 
    } 
} 

Si potrebbe anche estrarre i valori deleted, ricerca e disinserire tramite chiave:

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

Consiglia un 'break;' dopo 'unset (...)' per evitare loop non necessari. – Fr0zenFyr

0

È possibile utilizzare array_map() .Try questo

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