需要来自两个多维数组的公共数组



你好,我有以下多维数组-

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已经内置了大量的函数,但有时你仍然需要自己实现一些东西。你想做的事情可以很容易地通过使用现有的函数来完成。

目标是完成以下步骤:

  1. 查找两个数组中存在的键
  2. 使用
  3. 键遍历数组
  4. 用每个键取两个输入数组的项
  5. 计算这两个数组的交集
  6. 将其放入结果数组

有一种方法:

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);

相关内容

  • 没有找到相关文章

最新更新