заменить — PHP на месте изменить один ключ в ассоциативном массиве?

Предположим, у меня есть этот ассоциативный массив:

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

Я хочу поменять ключ blue в yellow, Обратите внимание, что я хочу изменить ключ, не ценность. Я мог бы сделать это:

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

Но это приводит к 'yellow' => 'banana' быть в конец массива. Если бы мне нужно было поддерживать порядок массива, так 'yellow' => 'banana' находится в том же положении, что и 'blue' => 'banana' был раньше, как мне это сделать?

Конечно, я могу восстановить весь массив, добавив все пары ключ / значение и просто вставив yellow вместо blue ключ, но это кажется довольно вялым способом сделать это.

Есть ли более разумный / более эффективный (предпочтительно PHP-нативный) подход к этому, чтобы сделать это на месте?

-2

Решение

Следующий пример в основном взят из array_splice () для ассоциативных массивов

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

print_r($newArray);

Если мы знаем смещение, где находится клавиша «синий», мы можем добавить новый ключ желтого цвета на его место.

Так что в вашем случае смещение равно 1, потому что синий является вторым ключом в массиве.

0

Другие решения

Самый быстрый способ:

foreach($fruits as $key=>$value){
If ($key==="blue"){
$fruits["yellow"]= $value;
unset($fruits[$key]);
}
}
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;
0
По вопросам рекламы [email protected]