从array_keys返回的键的顺序是否与输入数组中的顺序相同?
2022-08-30 15:17:49
TL;DR:从理论上讲,你不能指望它。出于实际目的,IMO你可以。
由于文档不保证排序,那么从技术上讲,正确的答案是“不,你不能指望它”。
这是因为从理论上讲,开发人员可以选择保留将来更改实现的选项,以便它不再遵守现有顺序(也许是为了提高性能,或者获得其他好处)。
现在作为一个实际问题,我们知道当前的实现遵循排序 - PHP数组是有序的容器(除其他外,还有一个值的链接列表) - 这是你永远不会期望改变的东西。
如果是这样,则更改将暗示数组内部实现中的相应重大变化,而这反过来又可能会破坏许多其他代码。我不认为它会很快发生。
如果您担心,您始终可以选择一个作为正确的顺序,然后基于此重新实现另一个函数。如果您关心两个调用之间的一致性,则可能会同时调用这两个调用。那么为什么不同时做这两件事呢?例如,让我们假设 的顺序是“正确的”。然后做:array_keys
array_values
array_keys()
function arrayKV($arr) {
$keys = array_keys($arr);
$values = array();
foreach($keys as $key) {
$values[] = $arr[$key];
}
return array('keys' => $keys, 'values' => $values);
}
这样,您就知道它们的顺序相同。或者,您可以提供用作订单的密钥:
function arrayValuesStable($arr, $keys) {
$values = array();
foreach($keys as $key) {
$values[] = $arr[$key];
}
return $values;
}