查找数组差异

时间:2016-02-11 05:46:29

标签: php

我在这里似乎有点空白,

我有2个阵列:

$network_keys= array(
    (int) 0 => '7 ADELAIDE',
    (int) 1 => '7TWO ADELAIDE'
);

$dblist = array(
    (int) 0 => array(
        'PrpMedia' => array(
            'id' => (int) 3,
            'network_key' => '7 ADELAIDE',
            'media_id' => (int) 43
        ),
        'Media' => array(
            'id' => (int) 43,
            'media_type_id' => (int) 5,
            'media_location_id' => (int) 4,
            'media_name' => 'Channel 7 ADELAIDE',
            'deleted' => false
        )
    ),
    (int) 1 => array(
        'PrpMedia' => array(
            'id' => (int) 4,
            'network_key' => 'VIC 1HD BENDIGO',
            'media_id' => (int) 42
        ),
        'Media' => array(
            'id' => (int) 42,
            'media_type_id' => (int) 5,
            'media_location_id' => (int) 4,
            'media_name' => '7MATE',
            'deleted' => false
        )
    )
)

我想在$ dbList中找到$ network_keys中的哪些值。

要明确的是,我们正在寻找$ dblist [0] [' PrpMedia'] [' network_key']。

先谢谢!

预期数组:

$difference = array('7TWO ADELAIDE');

1 个答案:

答案 0 :(得分:2)

您可以使用array_maparray_diff

的组合来完成此操作
$diff = array_diff($network_keys, array_map(function($v) {
    return $v['PrpMedia']['network_key'];
}, $dblist));

在您给出的示例中,您将获得 $ network_keys 的值,因为它们都不会出现在搜索到的数组中。

代码首先将 $ network_keys 中的所有['PrpMedia']['network_key']值提取到一个与 $ dblist 具有相同平面结构的数组中。然后它只是区别,只保留 $ dblist 的元素,而不是在那个中间数组中出现。

请注意,此代码假定搜索的密钥['PrpMedia']['network_key']存在于 $ network_keys 的所有元素中。如果不能总是假设这种情况,那么添加一个检查,如下所示:

$diff = array_diff($network_keys, array_map(function($v) {
    return isset($v['PrpMedia']['network_key']) 
        ? $v['PrpMedia']['network_key']
        : null;
}, $dblist));

如果其中一个元素没有['PrpMedia']键,这也可以正常工作。