在不更改顺序的情况下更改阵列键
您只需设置新键并删除旧键即可“更改”数组元素的键:
$array[$newKey] = $array[$oldKey];
unset($array[$oldKey]);
但这会将密钥移动到数组的末尾。
有没有一些优雅的方法来更改密钥而不改变顺序?
(PS:这个问题只是出于概念上的兴趣,而不是因为我在任何地方都需要它。
您只需设置新键并删除旧键即可“更改”数组元素的键:
$array[$newKey] = $array[$oldKey];
unset($array[$oldKey]);
但这会将密钥移动到数组的末尾。
有没有一些优雅的方法来更改密钥而不改变顺序?
(PS:这个问题只是出于概念上的兴趣,而不是因为我在任何地方都需要它。
经过测试并:)工作
function replace_key($array, $old_key, $new_key) {
$keys = array_keys($array);
if (false === $index = array_search($old_key, $keys, true)) {
throw new Exception(sprintf('Key "%s" does not exist', $old_key));
}
$keys[$index] = $new_key;
return array_combine($keys, array_values($array));
}
$array = [ 'a' => '1', 'b' => '2', 'c' => '3' ];
$new_array = replace_key($array, 'b', 'e');
像这样的东西也可能有效:
$langs = array("EN" => "English",
"ZH" => "Chinese",
"DA" => "Danish",
"NL" => "Dutch",
"FI" => "Finnish",
"FR" => "French",
"DE" => "German");
$json = str_replace('"EN":', '"en":', json_encode($langs));
print_r(json_decode($json, true));
输出:
Array
(
[en] => English
[ZH] => Chinese
[DA] => Danish
[NL] => Dutch
[FI] => Finnish
[FR] => French
[DE] => German
)