您可以通过设置新密钥并删除旧密钥来简单地"change" the key of an array element:
$array[$newKey] = $array[$oldKey];
unset($array[$oldKey]);
但这会将键移动到数组的末尾。
有没有什么优雅的方法可以在不改变顺序的情况下改变密钥?
(附言:这个问题只是出于概念上的兴趣,而不是因为我在任何地方都需要它。)
发布于 2012-01-17 01:51:31
经过测试并正常工作:)
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');
发布于 2012-01-17 01:44:26
一种方法是简单地使用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;
}
另一种方法是serialize
数组,str_replace
序列化的键,然后再次unserialize
回数组。这并不是特别优雅,而且很容易出错,特别是当你不仅仅有标量或多维数组的时候。
第三种方式--我最喜欢的方式--是用C语言编写array_key_rename
,并将其应用于PHP ;)
发布于 2019-12-09 04:34:02
在继续…之前检查密钥是否存在否则,如果新密钥已经存在,结果可能是灾难性的……或者如果要替换的密钥不存在,则不必要的处理时间/存储器消耗。
function array_rename_key( array $array, $old_key, $new_key ) {
// if $new_key already exists, or if $old_key doesn't exists
if ( array_key_exists( $new_key, $array ) || ! array_key_exists( $old_key, $array ) ) {
return $array;
}
$new_array = [];
foreach ( $array as $k => $v ) {
$new_array[ $k === $old_key ? $new_key : $k ] = $v;
}
return $new_array;
}
https://stackoverflow.com/questions/8883974
复制相似问题