2016-04-05 8 views
0

Ich versuche, die letzten drei Elemente eines Arrays zu bewegen, um die ersten drei Elemente zu werden. Ist das möglich? Das Array ist variabel, je nachdem, welche Seite Sie sich gerade befinden, aber es wird in etwa so aussehen:verschiebe die letzten drei Elemente von PHP Array zu den ersten drei

Array 
(
    [4] => 1 
    [2] => 2 
    [3] => 6 
    [5] => 9 
    [0] => 10 
    [1] => 11 
) 

und ich muss es sein:

Array 
(
    [5] => 9 
    [0] => 10 
    [1] => 11 
    [4] => 1 
    [2] => 2 
    [3] => 6 
) 

Jede Hilfe würde geschätzt. Die Länge des Arrays wird sich auch pro Seite unterscheiden, daher bin ich mir nicht 100% ig sicher, wie ich vorgehen soll.

+3

Versuchen Sie, Pop und diese drei Elemente in einem temporären Array hinzufügen und dann array_unshift() verwenden, um sie zu prepend . – NoImaginationGuy

+1

Nur ein freundlicher Tipp, möchten Sie vielleicht über diese Seite lesen: [Der How-To-Ask Leitfaden] (https://Stackoverflow.com/help/how-to-ask) so können Sie immer sicher sein, dass Ihre Fragen sind leicht zu beantworten und so klar wie möglich. Stellen Sie sicher, dass Sie alle Anstrengungen unternommen haben, die Sie unternommen haben, um das Problem zu beheben, das Sie haben, und was passiert ist, als Sie diese Korrekturen versuchten. Vergessen Sie auch nicht Ihren Code und eventuelle Fehlermeldungen! –

Antwort

1

array_splice() wird verwendet, um Sequenzen von Elementen in einem Array zu extrahieren und einzufügen.

array_splice($array, 0, 0, array_splice($array, -3)); 

array_splice($array, -3) entfernt die letzten 3 Elemente des Arrays und gibt das als Array. Dann fügt array_splice($array, 0, 0, <that>) dieses Array am Anfang des Arrays ein.

Beachten Sie, dass die Keys assoziativer Arrays nicht erhalten bleiben, was in Ihrem Beispiel erforderlich zu sein scheint. Dafür können Sie die array_rotate Funktion in der Note documentation notes

function array_rotate($array, $shift) { 
    if(!is_array($array) || !is_numeric($shift)) { 
     if(!is_array($array)) error_log(__FUNCTION__.' expects first argument to be array; '.gettype($array).' received.'); 
     if(!is_numeric($shift)) error_log(__FUNCTION__.' expects second argument to be numeric; '.gettype($shift)." `$shift` received."); 
     return $array; 
    } 
    $shift %= count($array); //we won't try to shift more than one array length 
    if($shift < 0) $shift += count($array);//handle negative shifts as positive 
    return array_merge(array_slice($array, $shift, NULL, true), array_slice($array, 0, $shift, true)); 
} 
+0

Vielen Dank! Es hat funktioniert :) –

+1

@LeanneSeawright Es behält keine Schlüssel. Ich habe eine Funktion hinzugefügt, die das tut. – Barmar

2

definiert verwenden, dass array_splice doesnt Zifferntasten erhalten (wie es der Fall zu sein, nach dem OP Beispiel scheint). Wenn Sie, dass, wird dies auch funktionieren:

$array1 = array 
(
    4 => 1, 
    2 => 2, 
    3 => 6, 
    5 => 9, 
    0 => 10, 
    1 => 11 
); 

$array2 = array_slice($array1, -3, 3, true) + $array1; 

Und array2 $ wird:

Array 
(
    [5] => 9 
    [0] => 10 
    [1] => 11 
    [4] => 1 
    [2] => 2 
    [3] => 6 
) 
Verwandte Themen