2012-11-10 12 views
1

Comment supprimer toutes les entrées de tableau où l'état est égal à 0?Rechercher un tableau et supprimer des entrées

Cela signifie: $array[1][3]; et $array[4];

Array 
(
    [1] => Array 
     (
      [id] => 1 
      [parent_id] => 0 
      [status] => 2 
      [title] => bananer 
      [breadcrumb] => /bananer 
      [slug] => /bananer 
      [2] => Array 
       (
        [id] => 2 
        [parent_id] => 1 
        [status] => 2 
        [title] => sub bananer 
        [breadcrumb] => /bananer/sub bananer 
        [slug] => /bananer/sub-bananer 
       ) 
      [3] => Array 
       (
        [id] => 3 
        [parent_id] => 1 
        [status] => 0 
        [title] => sub bananer 2 
        [breadcrumb] => /bananer/sub bananer 2 
        [slug] => /bananer/sub-bananer-2 
       ) 
     ) 
    [4] => Array 
     (
      [id] => 4 
      [parent_id] => 0 
      [status] => 0 
      [title] => appelsin 
      [breadcrumb] => /appelsin 
      [slug] => /appelsin 
      [5] => Array 
       (
        [id] => 5 
        [parent_id] => 4 
        [status] => 2 
        [title] => sub appelsin 
        [breadcrumb] => /appelsin/sub appelsin 
        [slug] => /appelsin/sub-appelsin 
       ) 
      [6] => Array 
       (
        [id] => 6 
        [parent_id] => 4 
        [status] => 2 
        [title] => sub appelsin 2 
        [breadcrumb] => /appelsin/sub appelsin 2 
        [slug] => /appelsin/sub-appelsin-2 
       ) 
     ) 
) 
+0

avez-vous essayez de boucle et récursive? –

+0

Oui, mais je fais quelque chose de mal donc j'espérais que quelqu'un avait une solution simple et rapide – Cudos

Répondre

0

Essayez ceci:

function deleteIt(&$array) 
{ 
    foreach($array as $key => &$value) 
    { 
     if (is_numeric($key)) deleteIt($value); 
     if (isset($value['status']) && !$value['status']) unset($array[$key]); 
    } 
} 

Cela va à travers le réseau récursive en distribuant vos références si que le tableau original est modifié pendant que dele ting. Notez le & dans le prototype de fonction deleteIt et dans le foreach.

+0

Merci l'homme! Cela fonctionne parfaitement – Cudos

0

Quelque chose comme cela peut aider

function parse($var) 
{ 
    foreach($var as $key => $val) 
    { 
     if(is_array($val)) 
     { 
      parse($val) 
     } 
     else 
     { 
      if($key == 'status' && $val ==0) 
      { 
       // do something here 
      } 
     } 
    } 
} 
0

Vous pouvez faire quelque chose qui est très spécialisé comme:

function stripBadStatus($array) { 
foreach($array as $k=>$arr) { 
    if($arr['status'] == 0) { 
     unset($array[$k]); 
    } else if(is_array($arr)) { 
     foreach($arr as $deepk=>$deeparr) { 
      if($deeparr['status'] == 0) { 
       unset($array[$k][$deepk]); 
      } 
     } 
    } 
} 

return $array; 
} 
+0

Et s'il avait une 3ème couche? Allez-vous juste faire des boucles foreach sans fin et si des déclarations? Vous devriez utiliser quelque chose de récursif. –

Questions connexes