需要来自两个多维数组的通用数组

时间:2014-06-14 08:53:14

标签: php arrays multidimensional-array

嗨,我有多维数组 -

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(),但它限制为单个数组而不是多维我猜。

2 个答案:

答案 0 :(得分:2)

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

    它仅适用于两个维度。如果你需要更多,你必须建立一个递归方法,遵循完全相同的原则。

答案 1 :(得分:0)

为了便于比较,您可以在此处使用serialize/unserialize。然后使用array_intersect()。试试这个例子:Sample Output

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