我是一个相当新的与数组工作,我坚持能够删除一个条目。
如果我有:
$del_itemid = 58;
$del_modiifier = 1;
如何搜索我的数组$orders
并取消包含这些变量的数组?
$orders =数组([0] =>数组([itemid] => 67[修饰语]=> 1[数量]=> 1[unit_price] => 17.00[categoryid] => 2)[1] =>数组([itemid] => 58[修饰语] => 1[数量]=> 1[unit_price] => 18.00[categoryid] => 5)[2] =>数组([itemid] => 72[修饰语]=> 1[数量]=> 1[unit_price] => 10.00[categoryid] => 3))之前编辑:这是我一直在尝试的:
$i = 0; foreach($orders as $key => $value) { $itemid = $value['itemid']; $modifier = $value['modifier']; if ($itemid == $del_itemid && $modifier == $del_modifier) { unset($_SESSION['cart'][$i]); break; } $i++; }
既然你想检查2个值,我会使用array_filter()
循环遍历数组并过滤掉所有子数组,其中两个值都等于你的搜索值,例如
$newArray = array_filter($orders, function($v)use($del_itemid, $del_modiifier){
if($v["itemid"] == $del_itemid && $v["modifier"] == $del_modiifier)
return FALSE;
return TRUE;
});
我找到了一个基于我最初试图通过循环实现的解决方案。如果我使用array_splice()
而不是unset()
,它将重置索引,以便它仍然可以循环通过数组而没有索引中的洞:
$i = 0;
foreach($orders as $key => $value) {
$itemid = $value['itemid'];
$modifier = $value['modifier'];
if ($itemid == $del_itemid && $modifier == $del_modifier) {
array_splice($orders, $i,1);
}
$i++;
}