13

ここに私が持っている配列があります:

$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()たけどうまくいかなかった

4

5 に答える 5

26

ネイティブ 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"
}
于 2013-01-17T01:01:24.390 に答える
11

array_combinearray_valuesarray_keysを使用することで可能array_valuesです。単純なタスクに対して非常に多くの関数のように思えるかもしれませんが、もっと簡単な方法があるかもしれません。

array_combine( array_keys( $a ), array_reverse( array_values( $a ) ) );
于 2013-01-17T01:01:08.827 に答える
1

ここに別の方法があります。

$keys = array_keys($a);
$vals = array_reverse(array_values($a));
foreach ($vals as $k => $v) $a[$keys[$k]] = $v;
于 2013-01-17T01:10:12.757 に答える
0

これでできます(書いたばかりです、デモはこちら):

<?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) );
于 2013-01-17T01:01:59.280 に答える
0

I think this should work..

<?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);
?>
于 2013-01-17T01:22:14.837 に答える