我有以下内容:
$fileMetadata[$key][0] ="";
$fileMetadata[$key][1] = $message->getSubject();
$fileMetadata[$key][2] = //Expresion
...
$fileMetadata[$key][0] =Expresion;
我需要使用索引0,1,2来订购数组,这就是为什么我要做的第一件事是分配""在cero中排列。我也可以这样做:
$fileMetadata[$key][1] = $message->getSubject();
$fileMetadata[$key][2] = //Expresion
...
$fileMetadata[$key][0] =Expresion
$fileMetadata[$key] = array_values($fileMetadata[$key]);
我没有测试第二个,我很确定第一个实现消耗的资源少得多,但我并不是100%肯定。谁能确认一下? 除此之外。我在哪里可以找到PHP函数实现的算法?
答案 0 :(得分:2)
是的,您的第一种方法更有效率,因为您将在第二种方法中使用O(n*2)
并最终消耗两倍的内存,因为您将阵列复制到新阵列中。
array_values
的实施可以在ext/standard/array.c
的{{1}}中找到,从第2968行开始。
实现是非破坏性的,这意味着它将基于给定的参数数组创建一个新的值数组,从而丢弃键。 PHP中此函数的等效实现看起来像这样......
function array_values(Array $array) {
$newArray = [];
foreach($array as $value) {
$newArray[] = $value;
}
return $newArray;
}
虽然您可能会从这个实现中注意到,它根本不会改变数组中元素的顺序。它只是使用从0开始的数字键重新创建数组。
所以,例如,在你的数组......
$array = [
1 => 'foo',
2 => 'bar',
0 => 'baz'
];
array_values($array)
会给你......
array(3) {
[0]=>
string(3) "foo"
[1]=>
string(3) "bar"
[2]=>
string(3) "baz"
}
请注意,即使密钥现在是baz
而不是2
,0
仍然是最后的。如果我正确理解您的要求,这可能不一定是您想要的。
我会坚持你的第一种方法。