Php 两个数组的所有组合

Php 两个数组的所有组合,php,arrays,Php,Arrays,我把这个重新写了一遍,因为最初的问题写下来没有多大意义 我正在尝试编写一段代码,将数学问题添加到数据库中。这些都是比率问题 例如,我想添加许多问题,如“简化10:6”,并将答案存储为“5:3” 我想最好的办法是将数字存储为数组,将早期的素数存储为数组(我现在只需要素数倍数) 然后我可以循环通过这个数组。这是我能做到的。然而,我想要我的数字的每一个可能的组合,而不仅仅是在数组中循环一次 例如,我想要这些问题 2:4、3:6、5:10、7:14等 所以我想将数字[0…8]与其他每一个数字配对,然后循

我把这个重新写了一遍,因为最初的问题写下来没有多大意义

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

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

我想最好的办法是将数字存储为数组,将早期的素数存储为数组(我现在只需要素数倍数)

然后我可以循环通过这个数组。这是我能做到的。然而,我想要我的数字的每一个可能的组合,而不仅仅是在数组中循环一次

例如,我想要这些问题 2:4、3:6、5:10、7:14等

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

这就是我目前所拥有的。它完全不起作用。我意识到在那里手动输入所有内容会更快,但我也想学一点编码

   $digits = array(9,8,7,6,5,4,3,2,1);
   $primes = array(2,3,5,7,11);

   for ($first = 0; $first < count($digits)-1; $first++) {
         $num1 = $digits[$first];
      for ($second = 1; $second < count($digits)-2; $second++) {
         $num2 = $digits[$second];
            for ($third = 0; $third < count($primes)-1; $third++) {
         $num3 = $num1 * $primes[$third];
         $num4 = $num2 * $primes[$third];

         $questionlead = "Simplify <br>" .$num3. " : " . $num4 ;
         $ans = $num1. " : " . $num2 ;

   $dbhost = 'nope';
   $dbuser = 'notfor';
   $dbpass = 'you';

   $conn = mysql_connect($dbhost, $dbuser, $dbpass);

   if(! $conn ) {
      die('Could not connect: ' . mysql_error());
   }

   $sql = "INSERT INTO QuestionDB(TopicID, TopicName, SubtopicID, SubtopicName, Question, Answer, Difficulty, Author, Projectable) VALUES (6,'Ratio',1,'Simplifying ratio','".$questionlead. "','".$ans. "',1,'Richard Tock','Yes')";
   mysql_select_db('db_name');
   $retval = mysql_query( $sql, $conn );

   if(! $retval ) {
      die('Could not get data: ' . mysql_error());
   }

      }
}
}
   mysql_close($conn);
?>
$digits=数组(9,8,7,6,5,4,3,2,1);
$primes=数组(2,3,5,7,11);
对于($first=0;$first”$num3.:“$num4;
$ans=$num1.“:”$num2;
$dbhost='nope';
$dbuser='notfor';
$dbpass='you';
$conn=mysql\u connect($dbhost、$dbuser、$dbpass);
如果(!$conn){
die('无法连接:'.mysql_error());
}
$sql=“将值(6,'Ratio',1,'Simplification Ratio','“$questionlead.”,“$ans.”,1,'Richard Tock','Yes')插入问题数据库(主题ID,主题名称,副标题ID,副标题名称,问题,答案,难度,作者,可投影);
mysql_select_db('db_name');
$retval=mysql\u查询($sql,$conn);
如果(!$retval){
die('无法获取数据:'.mysql_error());
}
}
}
}
mysql_close($conn);
?>

我在这里迷失了方向

第一个函数是“智能”部分,因为它完成了所有的运算。它不会在事后进行简化,因此如果您最终在循环中找到答案,那么如果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个数字数组进行循环。它相当难看,我通常不喜欢嵌套for循环

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";
        }
    }
}
函数简化数组(数组$arr1、数组$arr2、数组$primes){

对于($i=0;$iI)你想用素数分解把分数降到最小公分母,但我想知道为什么你要倒过来,生成所有可能的等价。这是一个无限集,它会降到你已经计算过的结果。不是无限的。我想给它加一个边界。我想生成一组问题,然后进行投影。我在这里对乘法问题也做了同样的事情。我不是随机生成问题,因为我希望对显示的内容有很大的控制谢谢你的建议。但不确定这是否有效。它会输出像9/9=3/3和simplify:8/4=4/2这样的内容。不确定为什么。好的,我知道对这样的情况进行简单检查。如果num%denom==0,那么我们知道我们可以将它们除以。检查更新的链接以获得结果。此外,还有一些情况,例如4/1,会得到4/1作为答案。我将1添加到素数列表中,现在它可以解释这些情况。从技术上讲,我知道它不是素数,但在幕后没关系。希望这能有所帮助。谢谢,老兄。这段代码中有很多我不理解的内容,我是新手。我想我可能有点不知所措。我不太明白arrs1和arr2是从哪里来的。另外,虽然我真的很感谢你的帮助,但这并没有达到我想要的效果。那么,我想要1:2的比例在某一点上,所有的都是素数倍数。例如2:4,3:6,4:8,…11:22,然后1:3,2:6,3:9…11:33,然后n:m,其中n和m都是数字,我希望所有的素数倍数都达到11*我真的不明白为什么我的代码,虽然不雅观,但不能正常工作,宝贝步骤!我可能误解了你的意思你正在寻找。我建议你在确定算术正确之前不要担心数据库中的存储。创建一个使用简单参数的函数,例如createPrimeMultiples(int1、int2、PrimeNumberArray)。使用这些参数构建一个数组。然后可以使用诸如createPrimeMultiples(1,2,[2,3,5,7,11])之类的参数调用该函数。您已经知道要输出什么了,[2:4,3:6,5:10,…],将第一个num乘以素数,然后将第二个num乘以素数。明白了!