首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >两个数组PHP的所有组合

两个数组PHP的所有组合
EN

Stack Overflow用户
提问于 2018-06-22 01:47:46
回答 1查看 254关注 0票数 0

我重发了这篇文章,改写了一下,因为最初的问题写下来没有多大意义。

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

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

我认为最好的做法是将数字存储为数组,将早期的质数存储为数组(目前我只想要质数的倍数)。

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

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

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

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

代码语言:javascript
复制
   $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);
?>

我在海上迷路了

EN

回答 1

Stack Overflow用户

发布于 2018-06-22 02:54:18

第一个函数是“智能”部分,因为它完成了所有的运算。它不会在事后简化,所以如果你最终在循环中找到了答案,如果1除以1,那么你可以只返回1,这可能是值得的。但我想保持这种方式,这取决于你想如何使用它!

代码语言:javascript
复制
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];
}

下一个函数通过两个数字数组进行循环。它相当难看,我通常不喜欢嵌套的for循环。

代码语言:javascript
复制
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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50974745

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档