2016-04-11 5 views
-1

Ich habe ein Array wie folgt aus:Wie kann ich das gesamte Array ausgehend von einer beliebigen Position durchlaufen? So

$arr = [0, 1, 2]; 

Jetzt bekomme ich einen Benutzereingabe, z.B.

$input = 1; 

Abhängig von diesem Eingang möchte ich alle Array-Elemente durchlaufen, ausgehend von der Position dieses Eingangs.

Beispiel:

//Array: [0, 1, 2] 
Input: 0 Output: 012 
Input: 1 Output: 120 
Input: 2 Output: 201 

Ich weiß nicht viel über PHP so habe ich versucht, eine einfache for-Schleife:

for($x = 1; $x <= 2; $x++) 
{ 
    echo $x; 
} 

Aber offensichtlich funktioniert das nicht, also bin ich fest aus wo ich von hier aus gehen muss.

+3

Sie können nicht mehr als 120 erhalten von einer einfachen Schleife, nur 012 oder 210. –

+3

Warum, wenn du von 1 startest und zu 0 gehst, würdest du erwarten, 120 zu sehen? Diese Frage ergibt keinen Sinn. –

+0

Der Grund, warum ich so will, weil ich diesen Code habe, der acctroding zur Benutzereingabe läuft. Zuerst habe ich ein Array, das die Werte von 0,1 und 2 hat. Wenn der Benutzer 0 wählt, wird 012 angezeigt, aber wenn der Benutzer 1 wählt, wird 120 angezeigt, und wenn der Benutzer 2 wählt, wird 210 angezeigt. – user9937

Antwort

-4
foreach([1,2,0] as $num){ 
    echo $num; 
} 
3

Also, was wollen Sie zu tun ist eine ArrayIterator zu erstellen.

Dann setzen Sie die Position des Iterators mit abhängig davon, welche Eingabe Sie erhalten. Sie können die Position leicht mit array_search() erhalten:

$it->seek(array_search($input, $arr)); 

(Wenn die Eingabe nicht in dem Array array_search() einfach FALSCH zurück gefunden wird, die dann als 0 verwendet wird, bedeutet, dass Sie nur eine Schleife durch das Array)

Dann können Sie einfach die Anzahl der Elemente, die Sie im Array haben, mit einer for-Schleife durchlaufen, beginnend mit der eingestellten Position. Und wenn Sie das Ende des Arrays schlagen Sie es einfach umstülpen:

//End of array? 
if(!$it->valid()){ 
    //Start again 
    $it->rewind(); 
} 

-Code

<?php 

    $arr = [0, 1, 2]; 
    $input = 1; 

    $it = new ArrayIterator($arr); 
    $it->seek(array_search($input, $arr)); 

    for($i = 0, $length = count($arr); $i < $length; $i++){ 
     if(!$it->valid()){ 
      $it->rewind(); 
     } 
     echo $it->current(); 
     $it->next(); 
    } 

?> 

Ausgang:

120 
+0

Danke für diesen Code. . – user9937

+0

Ich habe das bereits mit zwei for loops gelöst, einer zeigt die 12 und die zweite loop zeigt nur die Null an und übergibt die Funktion, die ich gemacht habe. Danke fürs Helfen. – user9937

+1

@ user9937 Gern geschehen. Deine Frage war zuerst sehr vage, also empfehle ich dir, [ask] zu sehen. Außerdem haben Sie dann einen nützlichen Kommentar zur Klärung der Frage gegeben, aber Informationen über Ihre Frage in die Frage eingefügt, indem Sie sie bearbeitet haben. Siehe auch: http://stackoverflow.com/questions/36539309/how-can-i-loop-through-the-entire-array-start-from-any-position/36539744?noredirect=1#comment60681747_36539309 nur um die zu bekommen letzte Verwirrung geklärt. (Übrigens: Um einen schnellen Überblick über die Seite zu erhalten, siehe [Tour]) – Rizier123

Verwandte Themen