2013-01-17 6 views
9

Hier halten ist ein Array Ich habe:Reverse-Werte-Array, während Tasten

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

Was würde ich die Werte des Arrays zu tun ist umgekehrt, während die Schlüssel intakt zu halten, ist es mit anderen Worten soll wie folgt aussehen :

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

Wie soll ich darüber gehen?

P.S. Ich versuchte array_reverse() verwenden, aber es schien nicht

+0

Es ist ziemlich cool, dass dies möglich ist, und da unten es da ein Motto auch cool. Was wäre ein Anwendungsfall, in dem Sie die Schlüssel gleich behalten möchten, die Daten jedoch umgekehrt haben? –

Antwort

23

Einige Schritt-für-Schritt-Verarbeitung mit nativen PHP-Funktionen (dies kann mit weniger Variablen komprimiert werden):

$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); 

Ergebnis:

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

+1 für das gründliche Beispiel, und schnelle Antwort – pzirkind

+5

array_reverse hat tatsächlich ein zweites Argument 'preserve keys', die genau das gleiche in einem Anruf tun. '$ rv = array_reverse ($ v, true);' – lifecoder

+1

@lifecoder Sie verpassen den zentralen Punkt der Frage: Die Schlüssel sollten NICHT umgekehrt werden, nur die Werte. – Sven

7

zu arbeiten Es ist möglich, durch die Verwendung array_combine, array_values, array_keys und array_values. Mag für eine einfache Aufgabe wie eine schreckliche Menge von Funktionen scheinen, und es kann leichtere Möglichkeiten geben.

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

+1 Danke für Ihre schnelle Antwort – pzirkind

+0

Ihr einziger Liner ist wirklich nett, danke, dass Sie mir das beigebracht haben! – pzirkind

0

Dies werde es tun (schrieb es einfach, 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 Danke für die Funktion – pzirkind

+1

Die Funktion hatte Tippfehler, behoben – guidod

+0

@guidod Ihre Bearbeitung war korrekt, aber _usual_ vorgeschlagene Änderungen werden abgelehnt. Für weitere Diskussionen zu diesem Thema lesen Sie bitte [diese Frage] (http://meta.stackoverflow.com/questions/252806/when-should-i-edi-etwas-vs-comment-on-it-if-its-its- a-relativ-Trivial-Fehler) auf Meta – Alik

1

Hier ein anderer Weg;

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

Ich denke, das sollte funktionieren ..

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