在数组中匹配对(PHP)

时间:2013-11-20 00:47:50

标签: php arrays

考虑以下两个数字的因素......

120:2,2,2,3,5 240:2,2,2,2,3,5

我正在尝试识别匹配的素因子对,并将它们相乘。我将每个列在两个数组中:$ factor_list_1和$ factor_list_2

使用:$commons = array_intersect_assoc($factor_list_1, $factor_list_2);
给出:Array ( [0] => 2 [1] => 2 [2] => 2 )
不正确

使用:$commons = array_intersect($factor_list_1, $factor_list_2);
给出:Array ( [0] => 2 [1] => 2 [2] => 2 [3] => 3 [4] => 5 )
正确

然而,如果我的数字是99和957,我们得到......

99:3,3,11 957:3,11,29

我正在尝试识别匹配的素因子对,并将它们相乘。我将每个列在两个数组中:$ factor_list_1和$ factor_list_2

使用:$commons = array_intersect_assoc($factor_list_1, $factor_list_2);
给出:数组([0] => 3)`
不正确

使用:$commons = array_intersect($factor_list_1, $factor_list_2);
给出:Array ( [0] => 3 [1] => 3 [2] => 11 )
不正确

我正在随机生成数字,所以任何想法都可以正确识别匹配的素数因子对吗?

2 个答案:

答案 0 :(得分:2)

$l = array(2, 2, 2, 3, 5);
$r = array(2, 2, 2, 2, 3, 5);

$cnt_l = array_count_values($l);
$cnt_r = array_count_values($r);

$result = array();
foreach ($cnt_l as $number => $count) {
    if (isset($cnt_r[$number])) {
        $result = array_merge($result, array_fill(0, min($count, $cnt_r[$number]), $number));
    }
}

var_dump($result);

所以你:

  1. 计算每个因素发生的次数
  2. 检查它是否在另一个数组中
  3. 将因子N追加到结果数组

答案 1 :(得分:0)

只需使用array_product(array_intersect())