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

问题描述 投票:0回答:4

假设我有这个关联数组:

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

我想将键

blue
更改为
yellow
。请注意,我想更改key,而不是值。我可以这样做:

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

但这会导致

'yellow' => 'banana'
位于数组的end。如果我需要保持数组的顺序,那么
'yellow' => 'banana'
与之前的
'blue' => 'banana'
处于相同的位置,我该怎么做?

当然,我可以重建整个数组,添加所有键/值对,然后插入

yellow
而不是
blue
键,但这似乎是一种相当缓慢的方法。

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

php replace key associative-array in-place
4个回答
0
投票

以下示例主要取自关联数组的array_splice()

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

                        print_r($newArray);

如果我们知道“蓝色”键所在位置的偏移量,我们可以在其位置添加一个新的黄色键。

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


0
投票

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

 $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
循环并重建数组。如果您想要通用解决方案,只需根据此代码编写一个简单的函数即可:

 $temp_array=array();

 foreach($fruits as $key=>$value){

 if($key=="blue") $key="yellow";

 $temp_array[$key]=$value;
 }

 $fruits=$temp_array;

-1
投票
if (!empty($fruits) && array_key_exists("blue",$fruits))
{
    $keepValue = $array['blue'];
    $newKey = 'yellow';
    unset($item['field_64c782fc4c55d']);
    $item[$newKey]=$keepValue; 
}

-1
投票

最快的方法:

foreach ($fruits as $key => $value){ 
     if ($key === "blue") {
         $fruits["yellow"] = $value;
         unset($fruits[$key]);
     }
 }
© www.soinside.com 2019 - 2024. All rights reserved.