我在这里似乎有点空白,
我有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');
答案 0 :(得分:2)
您可以使用array_map和array_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']
键,这也可以正常工作。