如果它属于数组,则从二维数组中删除

Remove from 2d array if it belongs in array

如果 make 值属于 retiredCars 数组,我将尝试删除 cars 数组中的数组。我将 运行 转换为 array_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 来实现翻转 retiredCars 数组的性能。 Live demo

您也可以使用 array_udiff 来制作它。参考这个post.

<?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_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);

demo on eval.in