匹配数组上的子数组并计算它们

时间:2010-09-08 06:34:45

标签: php arrays

我有一个数组

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

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

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

)

我需要找到常见的子阵列

在上面的示例中,数组1和3具有公共子数组

(
   [0] => 1
   [1] => 3
)

所以最终的数组必须是

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

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

但我需要计算一些常见的数值。

任何建议。

2 个答案:

答案 0 :(得分:3)

我不会将它用于生产代码,但这里是一个快速的&有点聪明的方法:

$arrays = array(array(1,3), array(1,2), array(1,3)); // Your example data

$serialized = array_map('serialize', $arrays);
$counts = array_count_values($serialized);
foreach ($counts as $data => $count) {
  echo "$count: " . print_r(unserialize($data), true);
}

答案 1 :(得分:1)

只需将数组的每个元素与其他元素进行比较,假设它们为线性数组,但使用 array_diff 来比较每个元素。如果它们不同,则将元素或数组索引复制到另一个数组