你好,我有以下多维数组-
Array
(
[user_attempts] => 0
[2] => Array
(
[0] => 1
[1] => 4
)
[3] => Array
(
[0] => 32
[1] => 23
)
[4] => Array
(
[0] => asdsa
)
[1] => Array
(
[0] => Earth
)
)
第二个数组在
下面Array
(
[1] => Array
(
[0] => Earth
)
[2] => Array
(
[0] => 2
[1] => 3
)
[3] => Array
(
[0] => 32
[1] => 23
)
[4] => Array
(
[0] => asdsa
[1] => asdas
)
)
我需要交叉两个多维数组-所以结果将是
Array
(
[1] => Array
(
[0] => Earth
)
[3] => Array
(
[0] => 32
[1] => 23
)
)
谁能帮我解决一下这个问题?
我所尝试的是使用array_intersect(),但它限制到单个数组,而不是多维的我猜。
PHP已经内置了大量的函数,但有时你仍然需要自己实现一些东西。你想做的事情可以很容易地通过使用现有的函数来完成。
目标是完成以下步骤:
- 查找两个数组中存在的键
- 使用 键遍历数组
- 用每个键取两个输入数组的项
- 计算这两个数组的交集
- 将其放入结果数组
有一种方法:
function array_intersect_2dim (array $a1, array $a2) {
$keys = array_intersect(array_keys($a1), array_keys($a2));
$return = array();
foreach ($keys as $key) {
$return[$key] = array_intersect($a1[$key], $a2[$key]);
if (sizeof($return[$key]) == 0) {
unset($return[$key]);
}
}
return $return;
}
它只适用于二维。如果您需要更多,您必须构建一个递归方法,它遵循完全相同的原则。
为了便于比较,您可以在此使用serialize/unserialize
。然后用array_intersect()
。输出示例
$array1 = array( 'user_attemps' => 0, 2 => array(1, 4), 3 => array(32, 23), 4 => array('asdsa'), 1 => array('Earth'),);
$array2 = array( 1 => array('Earth'), 2 => array(2, 3), 3 => array(32, 23), 4 => array('asdsa', 'asdas'),);
$result = array_map('unserialize',array_intersect(array_map('serialize', $array1), array_map('serialize', $array2)));
print_r($result);