如果属性值在另一个数组中,则从数组中删除php

时间:2017-11-15 19:45:12

标签: php arrays

我想从arr2中删除arr1中包含类型的所有元素:

    arr1 = ['A', 'B', 'C']

    arr2 = [
        [
        'name' => 'jane',
        'type' => 'X'
        ],
        [
        'name' => 'jon',
        'type' => 'B'
        ]
    ]

所以应该删除jon。是否有像array_diff这样的内置函数?

4 个答案:

答案 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]); }
}