php unset array from 2d session array

Posted

技术标签:

【中文标题】php unset array from 2d session array【英文标题】: 【发布时间】:2011-08-12 07:11:35 【问题描述】:

我正在像这样向二维数组添加东西:

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

如何从会话中将所有具有“模型”= 的数组删除到我选择的变量中? (注意:会话中总会有许多具有相同模型的数组。)

我尝试了以下方法,但它似乎没有从我的会话数组中删除任何内容:

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

    unset($vehicle[$model]);

谢谢!

【问题讨论】:

【参考方案1】:

$vehicle 是通过副本传递的,所以,unset $vehicle 什么都不做

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

【讨论】:

【参考方案2】:
$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]);
    

【讨论】:

最后一个代码是剪断了未定义的行为(有效,但本身是未定义的)还是在您当前迭代的数组中取消设置键好吗? +1 @nikic 它工作得很好,foreach 工作在数组的副本上。【参考方案3】:

你必须:

迭代您的车辆 对于每辆车,测试其型号是否是您正在寻找的车型 如果是,删除它:

可以通过像这样的部分代码来翻译:

$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]);
    

【讨论】:

【参考方案4】:
foreach($_SESSION['vehicles'] as $key => $vehicle) 
    if($vehicle['model'] == "toyota") 
        unset($_SESSION['vehicles'][$key]);
    

应该这样做。

我需要更快地写下我的答案。

【讨论】:

【参考方案5】:

您要删除的是数组中不存在的$vehicle['toyota']

试试这个吧..

$model = "toyota";
foreach ($_SESSION['vehicles'] as $key=>$vehicle) 

    if($model == $vehicle['model']) 
         unset($_SESSION['vehicles'][$key]);
        

【讨论】:

【参考方案6】:

首先要注意 $_SESSION['vehicles'] 是一个编号数组,所以 $vehicle[$model] 不能工作。接下来在foreach循环中修改item:

从 PHP 5 开始,您可以轻松修改 数组的元素由前面的 $value 和 &。这将分配参考 而不是复制值。

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

    if ($vehicle['model'] == $model)
         unset($vehicle);

【讨论】:

当他在做 &$vehicle 而不是 $vehicle 时,他正在处理实际元素,而不是副本。

以上是关于php unset array from 2d session array的主要内容,如果未能解决你的问题,请参考以下文章

(实用篇)PHP中unset,array_splice删除数组中元素的区别

PHP中unset,array_splice删除数组中元素的区别

unset()

PHP索引数组+unset使用不当导致的问题

PHP |通过重新排序从数组中删除元素?

更好列表页中一个航班.先unset删除数组中一个键值对,再追加,最后按键排序