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