2012-02-25 102 views
0

我在刪除數組元素時遇到了問題。看:未知的php未設置錯誤

<?php 
session_start(); 
$i = 0; 
$expected = $_GET['name']; 
foreach($_SESSION['chart'] as $name) 
{ 
    if($name==$expected) 
    { 
     break; 
    } 
    $i++; 
} 
unset($_SESSION['chart'][$i]); 

echo count($_SESSION['chart'])." ".$expected." ".$i; 
//echo "<script>history.go(-1);</script>"; 
?> 

我得到這樣的輸出:3名2

我知道在數組元素名爲「名」存在,但我不能取消它。請幫幫我。

回答

4

爲什麼不能讓PHP做搜索?

<?php 
session_start(); 
$key = array_search($_GET['name'], $_SESSION['chart']); 
if ($key !== false) { 
    unset($_SESSION['chart'][$key]); 
} 
+0

該解決方案的工作原理!謝謝! – user35443 2012-02-25 10:47:16

+1

如果那一個適合你,你應該標記他的答案是正確的。我能看到的唯一情況就是您的鑰匙可能因某些原因而不連續,在這種情況下,未設定的鑰匙可能不會指向正確的鑰匙。 :) – mkgrunder 2012-02-25 10:49:13

+1

那麼...與PHP你正在處理一個巨大的工具箱。如果PHP能爲你做點什麼,你只需要習慣於搜索。無需自己執行搜索。 ;) – 2012-02-25 10:49:21

1

,因爲你打電話取消設置出來的foreach

嘗試:

foreach($_SESSION['chart'] as $name) 
{ 
if($name==$expected) 
{ 
    unset($name); 
} 
$i++; 
} 
+0

不,它不在其中。我試圖讓它在數組中,它不起作用。 – user35443 2012-02-25 10:41:45

+0

什麼?!答案不完整,因爲建議不起作用。 – user35443 2012-02-25 10:44:04

+0

這是我添加到數組的代碼: $ _SESSION ['chart'] [] = $ name; – user35443 2012-02-25 10:45:30

1

你可以讓你的意圖更加清晰,通過使用這種形式的foreach

foreach($_SESSION['chart'] as $idx=>$name) 
{ 
    if($name==$expected) 
    { 
     unset($_SESSION['chart'][$idx]); 
     break; 
    } 
} 

然而,Till Helge Helwig's solution是這個特定的問題更好,但它是值得的知道,你並不需要保持你的使用foreach時擁有'key'變量。

+0

在使用'foreach'的所有解決方案中,這是唯一合理的解決方案。不需要手動對數組進行迭代。 :) – 2012-02-25 10:53:12

+1

你的手頭上的問題是更好的解決方案。但我認爲這將是有用的,表明你不必維護自己的關鍵變量。 – 2012-02-25 10:55:14