我有以下数组:
Array
(
[0] => Array
(
[0] => 87
[1] => 58
[2] => 85
[3] => 86
)
[1] => Array
(
[0] => 58
[1] => 84
)
[2] => Array
(
[0] => 58
)
)
上面的这个数组就是一个例子。实际的数组大小可变,但结构如下。基本上,我想在每个二级数组上运行array_intersect
并获取它们之间常见的值(数字)。在这种情况下,它将是58
。
我不太清楚从哪里开始。有什么建议吗?
答案 0 :(得分:12)
这对我有用:
function multi_intersect($arr) {
$return = array();
foreach ($arr as $a) {
foreach ($arr as $b) {
if ($a === $b) continue;
$return = array_merge($return, array_intersect($a, $b));
}
}
return array_unique($return);
}
应该得到你:
Array
(
[0] => 58
)
如果您在至少两个子阵列中有一个公共号码,则上述步骤将起作用。
编辑后:
如果要查找所有子数组中包含的数字,可以在call_user_func_array
上使用array_intersect
:
$intersect = call_user_func_array('array_intersect', $arr);
答案 1 :(得分:0)
如果您的示例中存在错误,并且“root”数组的[0]元素中应该有58,那么您应该运行
$res = $arr[0];
foreach($arr as $elem)
$res = array_intersect($res, $elem);
更通用的解决方案(嵌套数组):
<?php
//$arr -> your multidimensional array
function array_intersect_recursive($arr) {
$first = true;
foreach($arr as $elem) {
if(is_array($elem)) $elem = array_intersect_recursive($arr);
if($first) { $first = false; $res = $elem; }
else $res = array_intersect($res, $elem);
}
}
我没有测试过,但我希望你明白这个想法。