PHP就地更改关联数组中的单个键?

时间:2016-04-27 14:32:52

标签: php replace key associative-array in-place

假设我有这个关联数组:

$fruits = array(
 'red'   => 'strawberry',
 'blue'  => 'banana',
 'green' => 'apple',
);

我想将密钥blue更改为yellow。请注意,我想更改,而不是值。我能做到这一点:

$fruits['yellow'] = $fruits['blue'];
unset($fruits['blue']);

但这会导致'yellow' => 'banana'位于数组的 end 。如果我需要维护数组的顺序,那么'yellow' => 'banana''blue' => 'banana'之前的位置相同,我该怎么做?

当然我可以重建整个数组,添加所有键/值对,只需插入yellow而不是blue键,但这似乎是一种相当缓慢的方式。

是否有更智能/更高效(最好是PHP原生)的方法,以便就地执行此操作?

3 个答案:

答案 0 :(得分:0)

以下示例主要取自array_splice() for associative arrays

$newArray = array_slice($fruits, 0, $offset, true) +
            array('yellow' => 'banana') +
            array_slice($fruits, $offset, NULL, true);

                        print_r($newArray);

如果我们知道键的位置偏移"蓝"是的,我们可以在它的位置添加一个新的黄色键。

因此,在您的情况下,偏移量为1,因为蓝色是数组中的第二个键。

答案 1 :(得分:0)

一种解决方案是使用array_keys获取密钥,应用函数根据需要更改它们,然后使用array_combine将新键与值组合

PackageManager

另一种解决方案是使用 $array = array_combine(array_map('replace_key', array_keys($fruits)), $fruits); function replace_key($key){ if($key=="blue") return "yellow"; return $key; }

array_walk

另一种方法(可能更快)是使用 $result = array(); array_walk($fruits, function (&$value,$key) use (&$result) { if($key=="blue") $key="yellow"; $result[ $key ] = $value; }); print_r($result); 循环并重建数组。如果你想要一个通用的解决方案,只需根据这段代码编写一个简单的函数:

foreach

答案 2 :(得分:0)

最快的方式:

foreach($fruits as $key=>$value){ 
     If ($key==="blue"){
         $fruits["yellow"]= $value;
         unset($fruits[$key]);
     }
 }