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删除数组中元素的区别