Вот массив, который у меня есть:
$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()
но он, похоже, не работал
Некоторые пошаговые обработки с использованием собственных функций 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) );