PHP:如何通过多个匹配值删除数组的特定子数组?
假设我有一个这样的数组:PHP:如何通过多个匹配值删除数组的特定子数组?,php,arrays,multidimensional-array,key-value,Php,Arrays,Multidimensional Array,Key Value,假设我有一个这样的数组: $cart = [ [ 'productID' => '11111' , 'size' => 'M' , 'quantity' => 2 ], [ 'productID' => '11111' , 'size' => 'L' , 'quantity' => 4 ], [ 'productID' => '22222' , 'size' => 'S' , 'quantity' => 3 ], [ 'pro
$cart = [
[ 'productID' => '11111' , 'size' => 'M' , 'quantity' => 2 ],
[ 'productID' => '11111' , 'size' => 'L' , 'quantity' => 4 ],
[ 'productID' => '22222' , 'size' => 'S' , 'quantity' => 3 ],
[ 'productID' => '22222' , 'size' => 'L' , 'quantity' => 7 ],
[ 'productID' => '33333' , 'size' => 'M' , 'quantity' => 1 ]
];
现在,我希望能够从数组中删除多个值,如下所示:
removeElementFromArray( $cart , [ 'productID' => '11111' , 'size' => 'M' ] );
但我的问题是我不明白如何实现这一点的逻辑。这就是我所拥有的
function removeElementFromArray($targetArray=[],$needles=[]){
foreach( $targetArray as $subKey => $subArray ){
// This is wrong because $removeIt becomes TRUE by any needle matched
// but I want it to become TRUE only if all $needles match.
foreach( $needles as $key => $value ){
if( $subArray[$key] == $value ){
$removeIt = TRUE;
}
}
// delete row from array
if( $removeIt == TRUE ){ unset($targetArray[$subKey]); }
}
// return
return $targetArray;
}
对代码进行简单的修改就可以了。首先假设您可以删除一个元素,然后如果任何值不匹配,则将其标记为不匹配(并停止查找)
超短
array\u filter
版本,带array\u diff\u assoc
:
function removeElementFromArray($targetArray, $needles) {
return array_filter($targetArray, function ($item) use ($needles) {
return !empty(array_diff_assoc($needles, $item));
});
}
小提琴
function removeElementFromArray($targetArray, $needles) {
return array_filter($targetArray, function ($item) use ($needles) {
return !empty(array_diff_assoc($needles, $item));
});
}