2011-04-25 165 views
2

我添加的東西到一個二維數組是這樣的:PHP未設置陣列

$_SESSION['vehicles'][] = array ('model' => $_REQUEST['blah1'], 'price' => $_REQUEST['blah2'], 'year' => $_REQUEST['blah3']); 

我如何將刪除從會議有一個「模範」的所有陣列=我選擇的變量? (注意:總是會有很多陣列中的會話使用相同的模型。)

我曾嘗試以下,但它似乎並沒有從我的會話數組中刪除任何東西:

$model = "toyota"; 
foreach ($_SESSION['vehicles'] as $vehicle) 
{ 
    unset($vehicle[$model]); 
} 

謝謝!

回答

4

你必須:

  • 迭代在你的車
  • 每輛車,測試,如果它的模式是你正在尋找的
  • 如果是,請刪除它:


這可以通過這樣的一個部分代碼翻譯:

$model = "toyota"; 
foreach ($_SESSION['vehicles'] as $key => $vehicle) 
{ 
    if ($vehicle['model'] == $model) { 
     // The current vehicle's model is what you are searching for 
     // => delete if from $_SESSION 
     unset($_SESSION['vehicles'][$key]); 
    } 
} 
5

$車輛被複制過去了,所以,未設置$車輛無可奈何

$model = "toyota"; 
foreach ($_SESSION['vehicles'] as $idx => $vehicle){ 
    if($vehicle['model'] == $model){ 
     unset($_SESSION['vehicles'][$idx]); 
    } 
} 
5
$model = 'toyota'; 

// PHP <= 5.2 
$_SESSION['vehicles'] = array_filter($_SESSION['vehicles'], 
       create_function('$v', "return \$v['model'] != '$model';")); 

// PHP 5.3+ 
$_SESSION['vehicles'] = array_filter($_SESSION['vehicles'], 
       function ($v) use ($model) { return $v['model'] != $model; }); 

或者,你的方法:

foreach ($_SESSION['vehicles'] as $key => $vehicle) { 
    if ($vehicle['model'] == $model) { 
     unset($_SESSION['vehicles'][$key]); 
    } 
} 
+0

是最後的代碼剪斷未定義行爲(即工作,但本身是不確定的),或者是不落的鑰匙在一個數組您目前迭代器好嗎? +1 – NikiC 2011-04-25 12:20:15

+0

@nikic它工作得很好,'foreach'工作在數組的副本上。 – deceze 2011-04-25 12:21:07

+0

啊,謝謝你的信息。 – NikiC 2011-04-25 12:23:52

2

你正在試圖消除是$vehicle['toyota']這是不目前在陣列

試試這個,而不是..

$model = "toyota"; 
foreach ($_SESSION['vehicles'] as $key=>$vehicle) 
{ 
    if($model == $vehicle['model']) { 
     unset($_SESSION['vehicles'][$key]); 
    }  
} 
3
foreach($_SESSION['vehicles'] as $key => $vehicle) { 
    if($vehicle['model'] == "toyota") { 
     unset($_SESSION['vehicles'][$key]); 
    } 
} 

應該這樣做。

我需要更快地寫出答案。

0

首先請注意,$ _SESSION ['vehicles']是一個編號數組,因此$ vehicle [$ model]無法正常工作。下一步修改項目的foreach循環:

隨着PHP 5的,你可以很容易地通過在$ value 與&前修改 數組的元素。這將分配參考 而不是複製該值。

$model = "toyota"; 
foreach ($_SESSION['vehicles'] as &$vehicle) 
{ 
    if ($vehicle['model'] == $model) 
     unset($vehicle); 
} 
+0

這意味着你沒有設置參考,而不是實際的數組元素... – deceze 2011-04-25 12:25:56

+0

當他在做&$車輛而不是僅僅$車輛hes在實際元素上工作,而不是副本。 – 2011-04-25 12:35:02

+0

@ddd https:// ideone。com/StQ0T – deceze 2011-04-25 12:39:23