Как поменять местами элементы ассоциативного массива в php?

Нужно поменять местами в массиве два элемента с произвольно заданными ключами. Например, есть массив

['b' => 0, 'a' => 1, 'c' => 2]

нужно сделать из него массив

['b' => 0, 'c' => 2, 'a' => 1] 

(поменять местами значения с ключами 'a' и 'c').


Ответы (2 шт):

Автор решения: Qwertiy

http://ideone.com/XaEs1f

<?php

$a = array('b' => 0, 'a' => 1, 'c' => 2);

print_r($a);

$keys = array_keys($a);

$i = array_search('a', $keys);
$j = array_search('c', $keys);

if ($i !== false && $j !== false) {
    $keys[$i] = 'c';
    $keys[$j] = 'a';
}

$b = array();

foreach ($keys as $key)
    $b[$key] = $a[$key];

print_r($b);

Понятия не имею, насколько это нормально, но вроде работает...

→ Ссылка
Автор решения: apelsinka223
$array = array('b' => 0, 'a' => 1, 'c' => 2);
$array_order = array('b', 'c', 'a');

$sorted_array = array_merge(array_flip($array_order), $array);
// или
$sorted_array = array_replace(array_flip($array_order), $array);

array_flip меняет местами ключи и значения
array_merge сливает массивы, с замещением на значения второго массива
array_replace замещает по ключам значения первого массива значениями второго

Взято отсюда https://stackoverflow.com/questions/348410/sort-an-array-by-keys-based-on-another-array

→ Ссылка