【发布时间】:2021-01-18 03:30:29
【问题描述】:
我想修改一个函数内的一个大数组,所以我很确定我需要在那里使用引用,但我不确定这两个替代方案中哪一个更好(性能更高,但也可能有一些副作用?):
$array1 = getSomeBigArray();
$array2 = getAnotherBigArray();
$results[] = combineArrays($array1, $array2);
function combineArrays(&$array1, $array2){
// this is not important, just example of modification
foreach($array2 as $value){
if($value > 0){
$array1[] = $value;
}
}
return $array1; // will returning $array1 make a copy?
}
选项 2:
$array1 = getSomeBigArray();
$array2 = getAnotherBigArray();
combineArrays($array1, $array2);
$results[] = $array1;
function combineArrays(&$array1, $array2){
foreach($array2 as $value){
if($value > 0){
$array1[] = $value;
}
}
// void function
}
编辑:
我已经进行了一些测试,现在我更加困惑了。
这是测试:
https://ideone.com/v7sepC
从这些结果来看,根本不使用引用似乎更快!如果使用更快 option1(带返回)。
但在我的本地环境中,使用引用似乎更快(不是那么多)。
编辑 2:
也许ideone.com有问题?因为在这里运行相同:
https://3v4l.org/LaffP
结果是:
Opcion1 和 Option2(引用)几乎相等,比按值传递更快
【问题讨论】:
-
您确定选项 1 中的 & (&$array1) 吗?