对于巨大的数字循环


for loop on huge number

PHP

$SCode=$_POST['SCode'];
$ECode=$_POST['ECode'];
for($p=$SCode;$p<$ECode;$p++)
{
    $dbResult= $dbHandle->query("
    SELECT Code
    FROM Mashaghel 
    Where Code=" . $p . "");
    if(!isset($Mashaghel[0]["Code"]) || empty($Mashaghel[0]["Code"]))
    {
        $errorCode.=$p."،";
    }
}
echo $errorCode."does not existed!";

我运行这个

$_POST['SCode']='010100100101002084';
$_POST['ECode']='010100100101002087';

但这不起作用,并说错误Maximum execution time of 60 seconds exceeded010100100101002084010100100101002087之间的区别只有3。

为什么循环做无限!?

请帮助我

试试这个

for($p=0;$p<bcsub($ECode,$SCode);$p++)
    {
        $dbResult= $dbHandle->query("SELECT Code FROM Mashaghel
Where Code=" . bcadd($SCode,$p) . "");
        if(!isset($Mashaghel[0]["Code"]) || empty($Mashaghel[0]["Code"]))
        {
            $errorCode.=bcadd($SCode,$p)."،";
        }
    }

脚本执行这么长时间的原因可能是循环中的查询。您可以尝试将"LIMIT 1"添加到查询中,使其仅处理一行,或者将 1 更改为需要处理的行数。如果您仍希望使脚本能够执行更长时间,请参阅有关它的详细信息。默认情况下,PHP 会在 60 秒后终止脚本,以防止脚本挂起。php 中有一个值.ini定义 PHP 脚本可以运行的最长时间 - 它被称为 max_execution_time 。您还可以通过running set_time_limit()函数 (docs) 更改特定脚本的此值。

将 for 的限制分解为两个数字。 例如,假设您的 for 循环限制数是 1000 将其

分解为 100,10 使 2 嵌套 for 循环。

对于一些不可分割的数字,你可以一个接一个地做一些 for 循环,例如认为你的数字是 11做 5+6 就像你有 2 个 for 循环完全一样,在循环中用精确的代码彼此运行。您也可以在循环时进行测试。

毕竟,我不认为这是一个解决方案,它只是一种可以暂时解决问题的方法。

更改

 for($p=$SCode;$p<$ECode;$p++)

for($p=0; $p < ($ECode - $SCode - 1); $p++)

以及对循环内$p的引用以$p+$SCode