PHP多维数组相交
Posted
技术标签:
【中文标题】PHP多维数组相交【英文标题】:PHP multi dimensional array intersect 【发布时间】:2015-05-09 17:36:56 【问题描述】:我已经写了这段代码:
<?php
$aArray = array
(
array(0,0,0),
array(1,0,0),
array(2,0,0),
array(3,0,0),
array(4,0,0),
array(5,0,0),
array(6,0,0),
array(7,0,0)
);
$jump = array
(
array(0,0,0),
array(1,0,0),
array(9,7,4),
array(3,0,0),
array(4,0,0),
array(5,0,0),
array(6,0,0),
array(7,0,0)
);
$result = array_intersect($aArray, $jump);
echo var_dump($result);
我得到的结果是这样的:
array(8)
[0]=> array(3)
[0]=> int(0)
[1]=> int(0)
[2]=> int(0)
[1]=> array(3)
[0]=> int(1)
[1]=> int(0)
[2]=> int(0)
[2]=> array(3)
[0]=> int(2)
[1]=> int(0)
[2]=> int(0)
[3]=> array(3)
[0]=> int(3)
[1]=> int(0)
[2]=> int(0)
[4]=> array(3)
[0]=> int(4)
[1]=> int(0)
[2]=> int(0)
[5]=> array(3)
[0]=> int(5)
[1]=> int(0)
[2]=> int(0)
[6]=> array(3)
[0]=> int(6)
[1]=> int(0)
[2]=> int(0)
[7]=> array(3)
[0]=> int(7)
[1]=> int(0)
[2]=> int(0)
为什么第二个索引不返回 null?我已经尝试清空我的缓存,以防它在那里存储旧值。我还注意到,如果我从跳转数组中删除最后一个数组,它仍然会产生 7,0,0。这是一个奇怪的异常吗?
【问题讨论】:
【参考方案1】:array_intersect()
不是递归的,它将内部数组视为一个数组。你需要使用这样的东西:
function array_intersect_recursive()
foreach(func_get_args() as $arg)
$args[] = array_map('serialize', $arg);
$result = call_user_func_array('array_intersect', $args);
return array_map('unserialize', $result);
$result = array_intersect_recursive($aArray, $jump);
【讨论】:
感谢@AbraCadaver。我怀疑这与需要递归函数有关。很有帮助。我还发现当它返回相交点时,如果嵌套数组至少有一个键/值匹配,它将返回整个事物,因为它返回第一个参数的键。以上是关于PHP多维数组相交的主要内容,如果未能解决你的问题,请参考以下文章