2013-07-06 147 views
0

我有一個稱爲「值」的多維數組。這就是var_dump($values)現在的樣子。php array unset not working

array(1) { 
    [0]=> array(3) { 
     ["content"]=> array(1) { 
      ["items"]=> array(4) { 
       [0]=> string(4) "3121" 
       [1]=> string(4) "3116" 
       [2]=> string(4) "3115" 
       [3]=> string(4) "3114" 
      } 
     } 
     ["options"]=> array(8) { 
      ["title"]=> string(7) "inherit" 
      ["size"]=> string(4) "tiny" 
      ["orderby"]=> string(4) "date" 
      ["order"]=> string(4) "desc" 
      ["filter"]=> string(8) "category" 
      ["pagination"]=> bool(false) 
      ["per_page"]=> int(12) 
      ["content"]=> array(3) { 
       [0]=> string(5) "title" 
       [1]=> string(7) "excerpt" 
       [2]=> string(4) "tags" 
      } 
     } 
     ["__version"]=> string(5) "2.3.1" 
    } 
} 

這裏是我使用取消設置值

//before unset 
    var_dump($values); 

    $ID = "3121"; 
    foreach ($values as $value) { 
        foreach($value['content']['items'] as $key => $val) {    
        if($val == $ID) { 
        unset($value['content']['items'][$key]); 
        } 
        } 
     } 

    //after unset 
    var_dump($values); 

我的var_dump即使未設置看起來相同的代碼。我認爲我的數組未能正常工作。有人能告訴我我的代碼有什麼問題嗎?

+0

$鍵從未 –

回答

6

在PHP的數組是按值而不是通過引用變化

foreach ($values as $value) { 

foreach ($values as &$value) { 

的相關documen見here塔季翁。

+0

優秀。那固定之後看起來是一樣的。 – Giri

+0

@Giri記住在for循環結束後使用'unset($ value)'(這會刪除REFERENCE,** NOT **變量),或者你的代碼中有一個無用的引用(這實際上意味着如果你刪除最後一個值,例如使用'array.pop',它會留在內存中,因爲你將它引用到其他地方) – h2ooooooo

+0

@ h2ooooooo感謝您的建議。它真的很有幫助。 – Giri

3

你沒有把一個$key變量在for循環和改變值,你必須使用一個參考

foreach ($values as &$value) { 
    foreach($value['content']['items'] as $key => $val) {    
     if($val == $ID) { 
      unset($value['content']['items'][$key]); 
     } 
    } 
} 
+0

嘿,它甚至還補充說,關鍵變量 – Giri

0

foreach ($values as &$value)