Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/258.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 从数组_键返回的键的顺序是否与输入数组中的顺序相同?_Php - Fatal编程技术网

Php 从数组_键返回的键的顺序是否与输入数组中的顺序相同?

Php 从数组_键返回的键的顺序是否与输入数组中的顺序相同?,php,Php,给定如下所示的关联数组 $field_defaults = array( 'id' => 0, 'name' => 'new item', 'desc' => '', 'parent_id' => 0, ); 我可以依靠array\u keys()按指定的顺序返回键吗?或者,更准确地说,由于PHP中的数组似乎具有稳定的顺序,因此,array\u keys()返回的键是否与它们在输入数组中出现的顺序相同?政府没有给出任何暗示 当我尝试这样做时,他们似乎尊重

给定如下所示的关联数组

$field_defaults = array(
  'id' => 0,
  'name' => 'new item',
  'desc' => '',
  'parent_id' => 0,
);
我可以依靠
array\u keys()
按指定的顺序返回键吗?或者,更准确地说,由于PHP中的数组似乎具有稳定的顺序,因此,
array\u keys()
返回的键是否与它们在输入数组中出现的顺序相同?政府没有给出任何暗示


当我尝试这样做时,他们似乎尊重最初的秩序,但我希望能够依靠这种行为;博士:理论上你不能指望它;出于实际目的,你可以


由于文件不能保证订购,那么技术上正确的答案是“不,你不能指望”

这是因为从理论上讲,开发人员可以选择保留在将来更改实现的选项,以便不再遵守现有的顺序(可能是为了提高性能或获得其他好处)

现在作为一个实际问题,我们知道——PHP数组是有序的容器(其中有一个值的链接列表)——这是您永远不会期望更改的


如果它这样做了,那么更改将提示数组的内部实现发生相应的重大更改,而这反过来可能会破坏许多其他代码。我不认为这会很快发生。

如果您担心,您可以选择一个作为正确的顺序,然后在此基础上重新实现另一个函数。如果您关心这两个调用之间的一致性,您可能会同时调用
array\u键
array\u值
。那么,为什么不同时做这两件事呢?例如,假设
array_keys()
的顺序是“正确的”。然后做:

函数arrayKV($arr){
$keys=数组_键($arr);
$values=array();
foreach($key作为$key){
$values[]=$arr[$key];
}
返回数组('keys'=>$keys,'values'=>$values);
}
这样,你就知道它们的顺序是一样的。或者,您可以提供密钥作为订单使用:

function arrayValuesStable($arr, $keys) {
    $values = array();
    foreach($keys as $key) {
        $values[] = $arr[$key];
    }
    return $values;
}

正如我们今天发现的那样,仅供阅读本文的任何人参考-你不能指望这一点。它并不总是尊重订购。@Kyron您能提供更多的细节吗?