Php 如果二维阵列属于阵列,则从二维阵列中删除

Php 如果二维阵列属于阵列,则从二维阵列中删除,php,arrays,multidimensional-array,array-difference,Php,Arrays,Multidimensional Array,Array Difference,如果make值属于retiredCars数组,我将尝试删除cars数组中的数组。我确实遇到了array\u search,但我不知道如何将其应用于多维数组 $retiredCars = array("Saab", "Saturn", "Pontiac"); $cars = array ( array('make' => 'BMW', 'model' => '325'), array('make' => 'Saab', 'model' => '93'),

如果
make
值属于retiredCars数组,我将尝试删除cars数组中的数组。我确实遇到了
array\u search
,但我不知道如何将其应用于多维数组

$retiredCars = array("Saab", "Saturn", "Pontiac");

$cars = array
  (
  array('make' => 'BMW', 'model' => '325'),
  array('make' => 'Saab', 'model' => '93'),
  array('make' => 'Pontiac', 'model' => 'GTO')
  );

在上面的示例中,$cars数组在处理完数组元素后应该只包含'BMW'数组,

在遍历数组时取消设置数组元素似乎不是一个好方法。另一个想法是:

foreach ($cars as $key => $arr) {
    if (in_array($arr['make'], $retiredCars))
        unset($cars[$key]);
}
$array_elem_passes = function ($val) use ($retiredCars)
{
        if (in_array($val['make'], $retiredCars))
                return false;

        return true;
};

$ret = array_filter($cars, $array_elem_passes);  

为了提高性能,可以使用array_filter来翻转退休的dcars阵列

您还可以使用array_udiff来创建它。请参阅此

<?php
$retiredCars = array("Saab", "Saturn", "Pontiac");

$cars = array
  (
  array('make' => 'BMW', 'model' => '325'),
  array('make' => 'Saab', 'model' => '93'),
  array('make' => 'Pontiac', 'model' => 'GTO')
  );

$makes = array_flip(array_unique($retiredCars));
print_r(array_filter($cars, function($v)use($makes){return isset($makes[$v['make']]);}));

是。array\u udiff以这种方式执行此操作

$res = array_udiff($cars, $retiredCars, 
     function($c, $r) { 
         // You need test both variable because udiff function compare them in all combinations
         $a = is_array($c) ? $c['make'] : $c;
         $b = is_array($r) ? $r['make'] : $r;
         return strcmp($a, $b); 
         });

print_r($res);

例如,对于带in_数组的循环,请参考此Hi,仅代码的答案可能会解决问题,但对于其他读者来说,它们的价值远远低于同样包含一些解释的答案。因此,如果您能扩展您的答案,包括一些解释,我将不胜感激。在这种情况下,这似乎是我的最佳选择。你的路会慢得多。你能解释一下为什么你会有不同的想法吗?我认为,一般来说,在迭代数组时修改数组是不应该鼓励的,因为它可能会导致不必要的行为。