如果它属于数组,则从2d数组中删除

时间:2017-05-10 08:36:34

标签: php arrays multidimensional-array array-difference

如果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'数组

4 个答案:

答案 0 :(得分:1)

foreach ($cars as $key => $arr) {
    if (in_array($arr['make'], $retiredCars))
        unset($cars[$key]);
}

答案 1 :(得分:0)

在迭代数组时忽略数组元素似乎不是一个好方法。另一个想法:

$array_elem_passes = function ($val) use ($retiredCars)
{
        if (in_array($val['make'], $retiredCars))
                return false;

        return true;
};

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

答案 2 :(得分:0)

你可以使用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']]);}));

答案 3 :(得分:0)

是。 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