繁体   English   中英

PHP中的嵌套循环非常慢

[英]Nested loops in PHP extremely slow

我在PHP程序中有6个嵌套循环,但是,脚本的计算时间非常慢。 我想问一下是否有更好的方法来实现6个循环并增加计算时间,即使这意味着要切换到另一种语言也是如此。 我要实现的算法的性质需要迭代,因此我不知道如何更好地实现它。

这是代码。

<?php
$time1 = microtime(true);
$res = 16;
$imageres = 128;
for($x=0;$x<$imageres;++$x){
    for($y=0;$y<$imageres;++$y){ 
        $pixels[$x][$y]=1;  
    }};
$quantizermatrix = 1;
$scalingcoefficient = 1/($res/2);
for($currentimagex=0;$currentimagex<($res*($imageres/$res-1)+1);$currentimagex = $currentimagex +$res){
    for($currentimagey=0;$currentimagey<($res*($imageres/$res-1)+1);$currentimagey = $currentimagey +$res){
        for($u=0;$u<$res;++$u){
            for($v=0;$v<$res;++$v){   
                for($x=0;$x<$res;++$x){
                    for($y=0;$y<$res;++$y){
                        if($u == 0) {$a = 1/(sqrt(2));} else{$a = 1;};
                        if($v == 0){$b = 1/(sqrt(2));}else{$b = 1;};
                        $xes[$y] = $pixels[$x+$currentimagex][$y+$currentimagey]*cos((M_PI/$res)*($x+0.5)*$u)*cos( M_PI/$res*($y+0.5)*$v);
                    }
                    $xes1[$x] = array_sum($xes);
                }
                $xes2= array_sum($xes1)*$scalingcoefficient*$a*$b;
                $dctarray[$u+$currentimagex][$v+$currentimagey] = round($xes2/$quantizermatrix)*$quantizermatrix;
            }}}};
foreach($dctarray as $dct){
    foreach($dct as $dc){
        echo $dc." ";
    }
    echo "<br>";}
$time2 = microtime(true);echo 'script execution time: ' . ($time2 - $time1);
?>

我已经删除了大部分不相关的代码,因为这是有问题的代码部分

本质上,代码会遍历PNG图像中的每个像素,并输出一个计算出的矩阵(二维数组)。 对于128x128的图片,此代码大约需要2秒钟。 这使得该程序对于大于128x128的普通图像不切实际

Imagick库中有可用的功能

Imagick::exportImagePixels

请参阅下面的链接,它可能会帮助您http://www.php.net/manual/zh/imagick.exportimagepixels.php

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM