在保留键的情况下反转数组值


Reverse array values while keeping keys

我有一个数组:

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

我想做的是在保持键值不变的情况下反转数组的值,换句话说,它应该是这样的:

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

我该怎么做呢?

注:我尝试使用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_keysarray_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) );