2012-11-01 180 views
0

說我有以下幾點:最有效的方法來刪除嵌套的數組元素

Array(
[0] => Array 
    (
     [id] => 1 
     [item] => first item 
    ) 

[1] => Array 
    (
     [id] => 3 
     [item] => second item 
    ) 

[2] => Array 
    (
     [id] => 5 
     [item] => third item 
    ) 

) 

我想id = 5,刪除的項目,我知道我可以通過陣列並取消循環,但我希望能有更直接/有效的解決方案。

回答

3

如果你不能使ID作爲外部數組的鍵(那麼你可以簡單地使用unset($arr[5]);),循環數組確實是dg的方式。

foreach($arr as $key => $value) { 
    if($value['id'] === 5) { 
     unset($arr[$key]); 
     break; 
    } 
} 

另一種辦法是使用array_filter - 這是低效率的,雖然,因爲它創建了一個新的數組:

$arr = array_filter($arr, function($value) { 
    return $value['id'] !== 5; 
}); 
1

你爲什麼不創建一個設置爲ID的密鑰的陣列? E.g:

Array(
[1] => Array 
    (
     [id] => 1 
     [item] => first item 
    ) 

[3] => Array 
    (
     [id] => 3 
     [item] => second item 
    ) 

[5] => Array 
    (
     [id] => 5 
     [item] => third item 
    ) 

) 

然後,您可以寫:

<?php  
unset($array[5]); // Delete ID5 
?> 
+0

我處理一些較舊的JSON,不能操縱它,除非我可以在陣列設法譯... – Fluidbyte

+0

嗯,我想你可能是唯一的選擇如果無法操作,則循環播放 – ajtrichards

0

最有效的方法是將有2個陣列。

ID => Index 
Index => Object (your current array) 

搜索您的ID =>索引助手陣列ID和值將是指數的主陣列,然後取消設置他們兩個。

1

對於多級嵌套數組

<?php 
    function remove_array_by_key($key,$nestedArray){ 
     foreach($nestedArray as $k=>$v){ 
      if(is_array($v)){ 
       remove_array_by_key($key,$v); 
      } elseif($k==$key){ 
       unset($nesterArray[$k]); 
      } 
     } 
     return $nestedArrat; 
    } 
?> 
相關問題