2010-11-08 53 views
0

我這裏有一些代碼至極看起來如下:清除一個變量

if (isset($_SESSION['addToCart'])) { 
    foreach ($_SESSION["addToCart"] as &$value){ 
     if ($value['titel'] == $titel){ 
      $value['aantal'] = $aantal; 
      if($value['aantal'] == 0){ 
       unset($value); 
      } 
     } 
    } 
} 

所以當「aantal」 = 0,我想刪除的記錄,但它不只是還給結果和「aantal '是0而不是從會話中刪除記錄。 任何人都知道我做錯了什麼?

回答

0

manual:「當您取消設置參考時,您只需打破變量名稱和變量內容之間的綁定,這並不意味着變量內容將被破壞。」

你會想要做這樣的事情:

foreach ($_SESSION['addToCart'] as $key => &$value) { 
    if ($value['aantal'] == 0) { 
     unset($_SESSION['addToCart'][$key]); 
    } 
} 

認爲它像文件系統的符號鏈接。當你銷燬一個符號鏈接時,它不會銷燬它所鏈接的文件。

+0

這似乎沒有工作 – vincent 2010-11-08 19:34:50

+0

這是唯一有辦法取消設置數組鍵。你很可能做錯了。 – netcoder 2010-11-08 19:50:22

+0

也許我再次解釋不好,我不想完全刪除addToCart會話,它與它內的數組關聯數組,所以當從這些數組之一的記錄「aantal」等於0時,我想要刪除該數組,而不是整個會議 – vincent 2010-11-08 19:52:50

0

您的問題可能源於$ value是值變量,即$ _SESSION [「addToCarT」] [current_index]的副本。您應該將$ _SESSION [「addToCart」] [current_index]設置爲null或取消設置,而不是限制範圍內的副本變量。

+0

但是,沒有什麼&$的價值是什麼?我認爲這使得'價值'是實際記錄而不是副本? – vincent 2010-11-08 19:26:43

+0

什麼版本的PHP? – tsmith 2010-11-08 19:29:34

+0

想象它像文件系統的符號鏈接。當你銷燬一個符號鏈接時,它不會銷燬它所鏈接的文件。 – netcoder 2010-11-08 19:31:39

1

根據PHP文檔(http://php.net/manual/en/function.unset.php),通過引用傳遞的變量僅在本地上下文中被銷燬。嘗試$value = null;

+0

設置一個變量爲'null'不會破壞它。 – netcoder 2010-11-08 19:32:27

+0

這清空所有的值,但記錄仍然存在 – vincent 2010-11-08 19:33:02

+0

通過記錄,你是指數據庫中的一行嗎?因爲如果是這樣的話,你會以完全錯誤的方式去解決這個問題。 – 2010-11-08 19:38:32