我有以下两个数组:
编辑
根据@Wrikken的建议,我已经清理了第一个数组,现在有了这个:
第一阵列:
Array
(
[0] => 3
[1] => 4
[2] => 9
[3] => 11
)
Run Code Online (Sandbox Code Playgroud)
第二阵列:
Array
(
[3] => stdClass Object ( [tid] => 3 )
[12] => stdClass Object ( tid] => 12 )
[9] => stdClass Object ( [tid] => 9 )
)
Run Code Online (Sandbox Code Playgroud)
编辑
第二个数组在第一个数组上进行过滤.第二个数组有3,12,9.第一个数组不包含12,因此应从第二个数组中删除12个.
所以我最终应该:
Array
(
[3] => stdClass Object ( [tid] => 3 )
[9] => stdClass Object ( [tid] => 9 )
)
Run Code Online (Sandbox Code Playgroud)
你可以这样做:
$keys = array_map(function($val) { return $val['value']; }, $first);
$result = array_intersect_key(array_flip($keys), $second);
Run Code Online (Sandbox Code Playgroud)
该array_map呼叫将提取的值从值$first,使得$keys是这些值的阵列.然后array_intersect_key用于得到$keys(翻转以使用键作为值,反之亦然)和第二个数组的交集$second.
经过一些清理之后,我非常清楚我需要什么,这一点点排除了:
foreach ($second_array as $foo) {
if (!in_array($foo->tid, $first_array)) {
unset($second_array[$foo->tid]);
}
}
Run Code Online (Sandbox Code Playgroud)
对于关联数组,可以使用简单的键允许列表过滤器:
$arr = array('a' => 123, 'b' => 213, 'c' => 321);
$allowed = array('b', 'c');
print_r(array_intersect_key($arr, array_flip($allowed)));
Run Code Online (Sandbox Code Playgroud)
将返回:
Array
(
[b] => 213
[c] => 321
)
Run Code Online (Sandbox Code Playgroud)