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