我想从arr2中删除arr1中包含类型的所有元素:
arr1 = ['A', 'B', 'C']
arr2 = [
[
'name' => 'jane',
'type' => 'X'
],
[
'name' => 'jon',
'type' => 'B'
]
]
所以应该删除jon。是否有像array_diff这样的内置函数?
答案 0 :(得分:3)
使用array_filter
的解决方案之一:
print_r(array_filter(
$arr2,
function($v) use($arr1) { return !in_array($v['type'], $arr1); }
));
答案 1 :(得分:1)
如果type
是唯一的,那么这是另一个:
$result = array_diff_key(array_column($arr2, null, 'type'), array_flip($arr1));
$arr2
列的type
键控(索引)中提取数组$arr1
以获取值作为键在其上运行array_values
以根据需要重新编制索引。
答案 2 :(得分:0)
我认为没有办法只使用一个内置数组函数,但你可以将它们中的一些组合起来。
$record_types = array_column($arr2, 'type');
$records_to_keep = array_diff($record_types, $arr1);
$result = array_intersect_key($arr2, $records_to_keep);
答案 3 :(得分:0)
Foreach第二个数组并检查类型是否在arr1中。如果是这样,那么只需删除(取消设置)它。
foreach(array_keys(arr2) as $Key) {
if (in_array(arr2[$Key]['type'],arr1)) { unset(arr2[$Key]); }
}