PHP Foreach循环速度

时间:2012-09-11 19:27:02

标签: php loops

我正在尝试列出40,000个项目并为每个项目运行json请求。这个过程非常慢,我怀疑是因为每个json请求都在下一个请求开始之前完成。

$result = mysql_query("SELECT * FROM $tableName");

while($row = mysql_fetch_array($result))
{
 checkRank($row['Domain']);
}

checkRank正在运行以下内容:

$json = file_get_contents($jsonurl,0,null,null);

我想我一次可以运行10个checkRank来加速这个过程?还有其他想法/建议吗?

更新

例如,这个循环在27秒内贯穿我的阵列。

for ($i=0; $i<=100; $i++) {
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
checkRank($domains[$i]);
$i++;
echo "checking " . $i . "<br/>";

}

下面的循环使用相同的数组需要40秒。

for ($i=0; $i<=100; $i++) {
checkRank($domains[$i]);
echo "checking " . $i . "<br/>";

}

4 个答案:

答案 0 :(得分:1)

除非您还没有提到其他内容,否则执行此操作的最佳方法是执行一个JSON请求并将项目传递给它,并获得相同数量的结果。这样,您可以最小化服务器响应时间。我不确定你是否想发送40,000个项目,你可能想把它分成两部分,但是你可以稍后测试一下。

所以checkRank()看起来像

function  checkRank($domainsArray) {
$json = file_get_contents($jsonurl,$domainsArray);
}

答案 1 :(得分:1)

不确定这是否有用,因为我不使用PHP,但我确实发现了这一点。

How can one use multi threading in PHP applications

答案 2 :(得分:1)

...很遗憾,我今天在Stack Overflow上看到PHP无法支持线程,因为它需要对语言进行根本性改变......

https://github.com/krakjoe/pthreads

答案 3 :(得分:0)

http://www.phpied.com/simultaneuos-http-requests-in-php-with-curl/

这似乎是加快处理速度的好方法。感谢所有输入人员。