两个数组的所有组合PHP

时间:2018-06-21 17:47:46

标签: php arrays

我将其重新发布,改写,因为最初的问题写下来没有多大意义。

我正在尝试编写一些代码,将数学问题添加到数据库中。这些是比率问题。

例如,我想添加很多问题,例如“简化10:6”,并将答案存储为“ 5:3”。

我当时认为最好的方法是将数字存储为数组,将早期素数存储为数组(我现在只需要素数倍数)。

然后我可以遍历此数组。我能做的但是,我希望数字的每个可能的组合,而不仅仅是循环遍历数组一次。

例如,我要提问 2:4,3:3:6,5:10,7:14等

所以我想将数字[0 ... 8]与其他所有数字配对,然后遍历素数,并将这些组合与每个素数相乘。我知道这可能是某种嵌套的for循环,但是我真的不知道从哪里开始。

这是我到目前为止所拥有的。它什么也没做。我意识到手动输入所有内容会更快,但我也想学习一些编码。

String prefix = role.replaceFirst("(\\.).*", "");

我在这里迷路了

1 个答案:

答案 0 :(得分:0)

第一个函数是“智能”部分,因为它执行所有算术运算。它并不能简化事实,因此,如果您最终在循环中找到答案,则可能值得检查一下是否将1除以1,然后可以只返回1。但是我想保留这种方式,具体取决于关于您想如何使用它!

function simplify(Int $num, Int $denom, Array $primes){
    //going from high primes to low primes
    foreach(array_reverse($primes) as $prime) {
        if (($num % $prime == 0) && ($denom % $prime == 0)) {
            if ($num % $denom == 0) {
                return [intdiv($num,$denom)];
            } elseif ($denom % $num == 0) {
                return [1,intdiv($denom,$num)];
            }
            return [$num / $prime,$denom / $prime];
        }
    }
    return [$num,$denom];
}

下一个函数执行2个数字数组的循环。这非常丑陋,我通常不喜欢嵌套循环。

function simplifyArrays(Array $arr1, Array $arr2, Array $primes) {
    for($i=0; $i<count($arr1); $i++){
        $num1 = $arr1[$i];
        for($j=0; $j<count($arr2); $j++){
            $num2 = $arr2[$j];
            echo "simplify: $num1 / $num2 = " . implode("/",simplify($num1,$num2,$primes)) . "\n";
        }
    }
}

并查看其实际效果:https://3v4l.org/qmgJX