Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 我应该把函数放在foreach循环括号内吗?_Php_Loops - Fatal编程技术网

Php 我应该把函数放在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) {

什么更有效?将函数放置在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) {

        # 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