如果它属于数组,则从二维数组中删除
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);
如果 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);