php FOR 循环优化有关问题

WBOY
Freigeben: 2016-06-13 13:32:14
Original
1017 Leute haben es durchsucht

php FOR 循环优化问题
上次发个帖子没人跟,可能是问题不具体或者php基础编程人少或者太忙.............

我想从1-33选出6个不重复的号,然后写入数据库
现在选号过程PHP处理的很慢还总出错误,谁有兴趣帮我把下面的代码优化下:

PHP code
<!--

Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

--><?php $str=array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33);
for($i=0;$i<28;$i++){
    for($j=$i+1;$j<33;$j++){
        for($k=$j+1;$k<33;$k++){
            for($l=$j+1;$l<33;$l++){
                for($m=$l+1;$m<33;$m++){
                    for($n=$m+1;$n<33;$n++){
                        echo "$str[i]|$str[j]|$str[k]|$str[l]|$str[m]|$str[n]|<br>";//显示效果,本想写入TXT文档在传如数据库.
                    }
                }
            }
        }
    }
}
?>
Nach dem Login kopieren


------解决方案--------------------
PHP code
$a  = range(1, 33);
$ar = combination($a, 6);

//求组合高效率的10移动法
function combination($numArr,$combineLen) {
  $numCt    = count($numArr);
  if($combineLen > $numCt) return;
  $bin    = str_pad('',$combineLen,'1');
  $bin    = str_pad($bin,$numCt,'0',STR_PAD_RIGHT);    
  $find    = $bin;
  $rs[]    = implode(' ',array_slice($numArr,0,$combineLen));
  $j        = 1;
  while(strrev($find) != $bin) {
    $k = explode('10',$find,2);
    $find = $find{0} === '0' ? strrev($k[0]).'01'.$k[1] : $k[0].'01'.$k[1];
    for($i=0;$i<font color="#e78608">------解决方案--------------------</font><br>
Nach dem Login kopieren
PHP code
[User:root Time:21:21:46 Path:/home/liangdong/php]$ php permutation.php 
Total time used : 9738642ms
[User:root Time:21:21:56 Path:/home/liangdong/php]$ cat permutation.php 
<?php $beg_time = microtime(true);
$beg_time *= 1000 * 1000;

$table = range(1, 33);
$temp = array();
$fp = null;

function _get_permutations($index, $num) {
        global $temp;
        global $total;
        global $table;
        global $fp;

        if ($num == $total) {
                global $perms;
                fwrite($fp, json_encode($temp) . PHP_EOL);
                return;
        }

        for ($ndx = $index; 33 - $ndx + $num >= $total; ++ $ndx) {
                $temp[$num] = $table[$ndx];
                _get_permutations($ndx + 1, $num + 1);
        }
}

function get_permutations($n = 6) {
        global $total;
        global $perms;
        global $fp;

        if ($n  33) {
                return false;
        }

        $total = $n;
        $fp = fopen("data.txt", "w");
        _get_permutations(0, 0);
        fclose($fp);
        return true;
}

get_permutations();

$end_time = microtime(true);
$end_time *= 1000 * 1000;
echo "Total time used : " . ($end_time - $beg_time) . "ms" . PHP_EOL;

?> <div class="clear">
                 
              
              
        
            </div>
Nach dem Login kopieren
Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!