2013-01-17 14 views
9

を維持しながら、私が持っている配列です。リバース配列の値ここでキー

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

私がやりたい何かがそのままキーを維持しながら、他の言葉で、それは次のようになります、配列の値を逆になっています:

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

どうすればよいですか?

P.S.私はarray_reverse()を使用してみましたが、array_combinearray_valuesarray_keysarray_valuesを使用して

+0

そのこれが可能であることはかなりクール、そして一つ下のライナーもクールだとして、それを見て以下。キーを同じにしてデータを元に戻したいユースケースは何ですか? –

答えて

23

いくつかのステップバイステップの処理(これは、より少ない変数で圧縮することができます):

$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" 
} 
+0

+1と徹底的な応答 – pzirkind

+5

array_reverseには実際には1回の呼び出しで全く同じように2番目の引数 'preserve keys'があります。 '$ rv = array_reverse($ v、true);' – lifecoder

+1

@lifecoder質問の中心点がありません。キーを逆にすることはできません。 – Sven

7

ことが可能ですが動作していないようでした。単純なタスクのための関数のひどい多くのように思えるかもしれませんが、簡単な方法があるかもしれません。ネイティブPHPの関数を使用して

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

+1あなたの素早い応答に感謝します – pzirkind

+0

あなたの1つのライナーは本当にきれいです、教えてくれてありがとう! – pzirkind

0

これは(それをやりますちょうどそれを書いた、demo here):

<?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)); 
+0

+1の機能がありました – pzirkind

+1

機能にはタイプミスがありました – guidod

+0

@guidodあなたの編集は正しいですが、_usually_提案された編集は拒否されました。問題の詳細については、[この質問]を参照してください(http://meta.stackoverflow.com/questions/252806/when-should-i-itit-something-vs-comment-on-it-if-its- a-relative-trivial-error)メタ – Alik

1

ここに別の方法;私は、これは動作するはずだと思う

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

..

<?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); 
?> 
関連する問題