Php 我应该把函数放在foreach循环括号内吗?
什么更有效?将函数放置在foreach循环中Php 我应该把函数放在foreach循环括号内吗?,php,loops,Php,Loops,什么更有效?将函数放置在foreach循环中 $array = array(1, 2, 3, 4, 5); foreach (array_keys($array) as $key) { # do whatever... } 或在变量中指定以下内容: $array = array(1, 2, 3, 4, 5); $keys = array_keys($array); foreach ($keys as $key) {
$array = array(1, 2, 3, 4, 5);
foreach (array_keys($array) as $key) {
# do whatever...
}
或在变量中指定以下内容:
$array = array(1, 2, 3, 4, 5);
$keys = array_keys($array);
foreach ($keys as $key) {
# do whatever...
}
无论哪个看起来更可读。。。。虽然后者将使用比前者稍多的内存:但在这种情况下,两者都不是必需的,因为您可以:
$array = array(1, 2, 3, 4, 5);
foreach ($array as $key => $value) {
# do whatever...
}
如果您只需要这些键,您可以使用上面的命令,只需忽略该值(尽管在语法上您需要指定它)
编辑
如果您关心性能和内存使用,请使用256k元素数组进行快速测试(足以在统计数据中提供差异):
#1
给予
#2
给予
#3
给予
您正在循环使用完全相同的值。。。。内存中的开销是
value
元素的一个zval(取决于您的值实际是什么数据类型),并且在循环之后保留额外的zval。。。。对于其他任何一种方法,额外的内存需求是阵列本身的一个zval,加上每个阵列元素(每个键)的一个zval。。。。如果您明确定义$keys=array\u keys($array)代码>则循环后保留额外内存;如果使用foreach(array\u keys($array)as$key)
则循环后会释放额外的内存
foreach (array_keys($array) as $key) {
}
Call time was 0.0466 seconds
Current memory usage: 21.75 MB
Peak memory usage: 42.75 MB
$keys = array_keys($array);
foreach ($keys as $key) {
}
Call time was 0.0335 seconds
Current memory usage: 42.75 MB
Peak memory usage: 42.75 MB
foreach ($array as $key => $value) {
}
Call time was 0.0103 seconds
Current memory usage: 21.5 MB
Peak memory usage: 21.5 MB