假设我有这个关联数组:
$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原生)的方法,以便就地执行此操作?
答案 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]);
}
}