您只需设置新密钥并删除旧密钥即可"更改"数组元素的键:
$array[$newKey] = $array[$oldKey];
unset($array[$oldKey]);
Run Code Online (Sandbox Code Playgroud)
但是这会将键移动到数组的末尾.
是否有一些优雅的方式来改变密钥而不改变顺序?
(PS:这个问题仅仅是出于概念上的兴趣,而不是因为我在任何地方都需要它.)
Kri*_*ian 27
经过测试和工作:)
$array = array( "a" => "1", "b" => "2", "c" => "3" );
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));
}
$new_array = replace_key($array, "b", "e");
Run Code Online (Sandbox Code Playgroud)
anu*_*ava 10
这样的事情也可能有效:
$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));
Run Code Online (Sandbox Code Playgroud)
OUTPUT:
Array
(
[en] => English
[ZH] => Chinese
[DA] => Danish
[NL] => Dutch
[FI] => Finnish
[FR] => French
[DE] => German
)
Run Code Online (Sandbox Code Playgroud)
一种方法是简单地使用foreach迭代数组并将其复制到新数组,在迭代时有条件地更改键,例如,如果$ key ==='foo'则不使用foo但是bar:
function array_key_rename($array, $oldKey, $newKey)
{
$newArray = [];
foreach ($array as $key => $value) {
$newArray[$key === $oldKey ? $newKey : $key] = $value;
}
return $newArray;
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是serialize数组,str_replace序列化密钥,然后unserialize再次返回一个数组.虽然这并不是特别优雅且容易出错,特别是当你不只有标量或多维数组时.
第三种方式 - 我最喜欢的 - 就是你array_key_rename用C语言编写并为PHP核心提出它;)
| 归档时间: |
|
| 查看次数: |
7310 次 |
| 最近记录: |