2011-04-25 85 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