查找具有重复数组的数组

时间:2018-04-14 12:18:41

标签: php arrays

我有如下所示的数组,你可以看到 71 33 是重复值,所以我需要找到那些有重复值的数组

Array
(
    [0] => Array
        (
            [0] => 71
            [1] => 33
            [2] => 46
        )

    [1] => Array
        (
            [0] => 71
        )

    [4] => Array
        (
            [0] => 71
            [1] => 33
        )

)

预期输出:我想要类似下面的数组

Array
    (
        [71] => Array
            (
                [0] => 0
                [1] => 1
                [2] => 4
            )

        [33] => Array
            (
                [0] => 0
                [1] => 4
            )

    )

1 个答案:

答案 0 :(得分:3)

您可以遍历主数组和值以存储索引新数组。最后,您可以使用array_filter()来减少它以仅保留重复项:

$array = array(
    0 => array(
            0 => 71,
            1 => 33,
            2 => 46
        ),
    1 => array(
            0 => 71
        ),
    4 => array(
            0 => 71,
            1 => 33
        )
);

// loop over the main array:
foreach ($array as $index => $arr_values) {
    // loop over values:
    foreach ($arr_values as $value) {
        $out[$value][] = $index;
    }
}

// finally, remove entries with only one values:
$out = array_filter($out, function($values) { return count($values) > 1 ; });

print_r($out);

输出:

Array
(
    [71] => Array
        (
            [0] => 0
            [1] => 1
            [2] => 4
        )

    [33] => Array
        (
            [0] => 0
            [1] => 4
        )
)