Обратные значения массива при сохранении ключей

Вот массив, который у меня есть:

$a = array('a' => 'a1', 'b' => 'a2', 'c' => 'a3', 'd' => 'a4', 'e' => 'a5'); 

То, что я хотел бы сделать, – это изменить значения массива, сохранив ключи без изменений, другими словами он должен выглядеть так:

 $a = array('a' => 'a5', 'b' => 'a4', 'c' => 'a3', 'd' => 'a2', 'e' => 'a1'); 

Как мне это сделать?

PS Я попытался использовать array_reverse() но он, похоже, не работал

Solutions Collecting From Web of "Обратные значения массива при сохранении ключей"

Некоторые пошаговые обработки с использованием собственных функций PHP (это может быть сжато с меньшими переменными):

 $a = array('a' => 'a1', 'b' => 'a2', 'c' => 'a3', 'd' => 'a4', 'e' => 'a5'); $k = array_keys($a); $v = array_values($a); $rv = array_reverse($v); $b = array_combine($k, $rv); var_dump($b); 

Результат:

 array(5) { 'a' => string(2) "a5" 'b' => string(2) "a4" 'c' => string(2) "a3" 'd' => string(2) "a2" 'e' => string(2) "a1" } 

Это возможно с помощью array_combine , array_values , array_keys и array_values . Может показаться ужасным множество функций для простой задачи, и, тем не менее, могут быть более простые способы.

 array_combine( array_keys( $a ), array_reverse( array_values( $a ) ) ); 

Здесь другой путь;

 $keys = array_keys($a); $vals = array_reverse(array_values($a)); foreach ($vals as $k => $v) $a[$keys[$k]] = $v; 

Я думаю, что это должно сработать.

 <?php $old = array('a' => 'a1', 'b' => 'a2', 'c' => 'a3', 'd' => 'a4', 'e' => 'a5'); $rev = array_reverse($old); foreach ($old as $key => $value) { $new[$key] = current($rev); next($rev); } print_r($new); ?> 

Это будет сделано (просто написано здесь, демо здесь ):

 <?php function value_reverse($array) { $keys = array_keys($array); $reversed_values = array_reverse(array_values($array), true); return array_combine($keys, $reversed_values); } $a = array('a' => 'a1', 'b' => 'a2', 'c' => 'a3', 'd' => 'a4', 'e' => 'a5'); print_r( value_reverse($a) );