如何删除子数组,如果搜索值匹配


How can I delete a subArray, if search values matches?

我是一个相当新的与数组工作,我坚持能够删除一个条目。

如果我有:

$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++;  
}