2012-11-10 60 views
1

如何刪除狀態爲0的所有數組條目?搜索數組和刪除條目

這意味着:$array[1][3];$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

你嘗試循環和遞歸? –

+0

是的,但我做錯了,所以我希望有人有一個簡單和快速的解決方案 – Cudos

回答

0

試試這個:

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

這貫穿陣列遞歸而遞引用下來,原始數組在刪除時被修改婷。請注意0​​中的deleteIt函數原型和foreach

+0

謝謝你!它完美地工作 – Cudos

0

像這樣的東西可以幫助

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

你可以做一些高度專業化的,如:

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

如果他得到第三層呢?你只是要做無盡的foreach循環,如果語句?你應該使用遞歸的東西。 –