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