Home > Backend Development > PHP Tutorial > php FOR 循环优化有关问题

php FOR 循环优化有关问题

WBOY
Release: 2016-06-13 13:32:14
Original
1056 people have browsed it

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文档在传如数据库.
                    }
                }
            }
        }
    }
}
?>
Copy after login


------解决方案--------------------
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>
Copy after login
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>
Copy after login
Related labels:
source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template