我目前正试图找到解决当前问题的方法。
提供以下代码:
$array = array();
for($a=0;$a!=1000;$a++) {
$std = new \stdClass();
$array[] = $std;
$count = count($array);
for($i=0;$i!=$count;$i++);
}
PHP将在0.052025079727173秒左右运行脚本
,并提供:
$array = array();
for($a=0;$a!=100000;$a++) {
$std = new \stdClass();
$array[] = $std;
$count = count($array);
for($i=0;$i!=$count;$i++);
}
大约需要3.0082960128784秒。
假设:
$array = array();
for($a=0;$a!=100000;$a++) {
$std = new \stdClass();
$array[] = $std;
$count = count($array);
//for($i=0;$i!=$count;$i++);
}
运行于0.3171501159668。
现在我明白我正以高利率进行循环,而且我还没有进入这个领域。
所以我的问题是这个错误而且应该以不同的方式处理,PHP不能很好地处理横向大数据集,或者循环大量数据根本不是任何语言的明智之举。
答案 0 :(得分:2)
所以我的问题是这个错误而且应该以不同的方式处理,PHP不能很好地处理横向大数据集,或者循环大量数据根本不是任何语言的明智之举。
性能良好的PHP并不像C代码或汇编程序那么快。但这没有任何结果。
因此,进行多次迭代总是需要时间。用任何语言。你有很多,所以这需要时间。所以不要只是为了好玩而做一些循环,而是要实际完成某些事情;)。
答案 1 :(得分:1)
这个问题得到了很好的解决,在计算机科学界被正式称为“大O”符号。以下是描述Big-O表示法的文章的link。此时,由于较大循环内部嵌套/嵌入循环,您的Big-O值是指数级的。
我应该注意到你所做的事情并没有错,并且PHP能够处理大量数据,但是正如Coding Freak指出的那样,你可能会耗尽内存。我不知道你要做什么的背景,但也许考虑在“按需”的基础上进行操作,这会稍微提高你的性能,因为你不会初始化/设置/修改整个块数据,除非您正在尝试执行某种大批量操作(我在这里考虑页面加载时间,如果您正在进行大批量操作,每天只发生一次,那么就不用担心了约)。
你可能想要考虑一种不同的方式来处理你的计算,虽然你没有真正发布你希望实现的目标,但我能够提供解决方案的能力相当有限。
这是一个非常小的侧面评论,但是当你做循环时,如果由于某种原因你的增量变量超过1000,请不要以“i!= 1000”检查这样做“i< 1000”你不会以无限循环结束。就像我说的那样,一个非常小的评论 - 在您的代码的上下文中,它没有必要,但也不是最好的实践,因为它可能导致错误。
此致
ħ
答案 2 :(得分:0)
此行是不必要的:
$count = count($array);
你应该知道数组的数量,你不必每次循环都重新计算。尝试更换它,看看性能是否更好。
HTH。