首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在不更改顺序的情况下更改数组键

在不更改顺序的情况下更改数组键
EN

Stack Overflow用户
提问于 2012-01-17 01:38:25
回答 7查看 8.6K关注 0票数 25

您可以通过设置新密钥并删除旧密钥来简单地"change" the key of an array element

代码语言:javascript
复制
$array[$newKey] = $array[$oldKey];
unset($array[$oldKey]);

但这会将键移动到数组的末尾。

有没有什么优雅的方法可以在不改变顺序的情况下改变密钥?

(附言:这个问题只是出于概念上的兴趣,而不是因为我在任何地方都需要它。)

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2012-01-17 01:51:31

经过测试并正常工作:)

代码语言:javascript
复制
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');
票数 29
EN

Stack Overflow用户

发布于 2012-01-17 01:44:26

一种方法是简单地使用foreach迭代数组并将其复制到新的数组中,在迭代时有条件地更改键,例如,如果$key === ' foo‘,则不要使用foo而是bar:

代码语言:javascript
复制
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 ;)

票数 8
EN

Stack Overflow用户

发布于 2019-12-09 04:34:02

在继续…之前检查密钥是否存在否则,如果新密钥已经存在,结果可能是灾难性的……或者如果要替换的密钥不存在,则不必要的处理时间/存储器消耗。

代码语言:javascript
复制
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;
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8883974

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档