Php 如果搜索值匹配,如何删除子阵列?

Php 如果搜索值匹配,如何删除子阵列?,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我对使用数组是相当陌生的,我一直坚持能够删除条目 如果我有: $del_itemid = 58; $del_modiifier = 1; 如何搜索我的数组$orders,并取消设置包含这些变量的数组 $orders = Array ( [0] => Array ( [itemid] => 67 [modifier] => 1 [quantity] => 1 [unit_pr

我对使用数组是相当陌生的,我一直坚持能够删除条目

如果我有:

$del_itemid = 58;
$del_modiifier = 1;
如何搜索我的数组
$orders
,并取消设置包含这些变量的数组

$orders = Array ( [0] => Array ( [itemid] => 67 [modifier] => 1 [quantity] => 1 [unit_price] => 17.00 [categoryid] => 2 ) [1] => Array ( [itemid] => 58 [modifier] => 1 [quantity] => 1 [unit_price] => 18.00 [categoryid] => 5 ) [2] => Array ( [itemid] => 72 [modifier] => 1 [quantity] => 1 [unit_price] => 10.00 [categoryid] => 3 ) )
因为您想检查2个值,所以我将使用循环遍历数组并过滤掉所有子数组,其中两个值都等于您的搜索值,例如

$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\u 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++;  

}

我最初尝试使用带有计数器的for-each循环来首先获取索引,但在删除了一些项目并且索引不再有序后,此操作不起作用。^^将此尝试添加到您的问题中,并显示一些努力。更紧:
return$v[“itemid”]!=$del_itemid&&v[“修饰符”]!=$德鲁改装器
数组过滤器()的缺点是,在找到匹配项后,它不能被
中断停止。
$key
是索引(因为您正在对每个突变重新编制索引,它也是
数组拼接()
想要的位置),所以您应该使用它而不是
$i
。你的
坏了
到哪里去了?当您希望只找到一个匹配项时,这是最佳做法。
$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++;  

}