2016-04-23 20 views
-2

Für das System, das ich habe, es verwendet den folgenden Code, um die Fragen in der Position, um zu produzieren:Fragen nach oben und unten - PHP

foreach ($questionnaire->questions->sortBy('position_number') as $question) 

Ich möchte, ist für jede Frage-ID in der Lage sein wollen, zu tun um auf eine vorherige Fragen-ID und eine nächste Fragen-ID zuzugreifen. Wenn ich zum Beispiel die Frage-ID 1 mit der Position 3 habe, möchte ich auf die Frage-ID 3 mit der Position 2 und die Frage-ID 5 mit der Position 4 zugreifen können.

+1

Wir haben keine Idee, wie das ohne weitere Informationen über Ihre Klassen und was Sie eigentlich tun möchten. Bitte lesen Sie [** Fragen hier stellen **] (http://stackoverflow.com/questions/how-to-ask). –

Antwort

0

wenn und nur wenn das Array ein sequentielles Array ist, sollte der folgende Code funktioniert:

$myArray = ($questionnaire->questions->sortBy('position_number'); 
foreach ($myArray as $key => $value) 
{ 
    $keyPrev = $key - 1; 
    $keyNext = $key + 1; 

    echo "Next value is ".$myArray[$keyNext]."<br>"; 
    echo "Current value is ".$value."<br>"; 
    //OR 
    echo "Current value is ".$myArray[$key]."<br>"; 

    if ($key > 0) 
    echo "Previous value was ".$myArray[$keyPrev]."<br>"; 
} 

erinnern if ($key > 0) zu überprüfen, bevor $keyPrev weil in der ersten Iteration verwendet wird, werden Sie immer noch einen $ keyPrev und dass $ berechnen keyPrev wird ungültig sein.

+0

Das könnte erklären, warum ich dann nicht die richtigen Werte erhalte. Ich scheine eher den Index der for-each-Schleife als die tatsächlichen Frage-ID-Werte zu erhalten. Da jeder Fragensatz in einem Fragebogen eine eindeutige Positionsnummer haben wird, könnte ich dann eine where-Aussage zu jeder Position machen und die Frage so beantworten? Dies ist der Fall, wenn der Benutzer auf eine Schaltfläche nach oben oder nach unten klickt. Es wird wahrscheinlich ziemlich chaotisch sein, wenn ich versuche, den Weg zu einem sequentiellen zu wandeln. – userrandomuser

+0

@userrandomuser gibt es eine gute Chance. Es hängt wahrscheinlich davon ab, wie Sie das Array erstellt haben. Du könntest zur sortBy Funktion gehen und es so machen, dass es bei der Erstellung sequentiell ist, und das sollte es auch lösen :) – Webeng

+0

OK. Ich entschied mich, etwas Ähnliches mit den Positionsnummern und nicht mit den Frage-IDs zu machen. Dieser Ansatz funktioniert. Vielen Dank! – userrandomuser

0

Greifen Sie die Tasten des Arrays wie gewohnt mit array_keys() und dann foreach. Verwenden Sie einen Zähler, um zu verfolgen, auf welcher Taste Sie sich befinden. Dies funktioniert auch mit nicht numerischen Indizes.

$counter = 0; 
// store it so that we can access it however we like 
$questions = $questionnaire->questions->sortBy('position_number'); 
// get an array of keys of the $questions array. They are returned in order. 
$questionKeys = array_keys($questions); 
// use to check that there is a next question 
$countKeys = count($keys) - 2; 

foreach($questions as $question) { 
    // only want to access the previous question if there is a previous question 
    if ($counter > 0) { 
    $previousQuestion = $questions[$questionKeys[$counter - 1]]; 
    // do interesting things with the previous question 
    } 

    // only access the next question if there is a next question 
    if ($counter < $countKeys) { 
    $nextQuestion = $questions[$questionKeys[$counter + 1]]; 
    //do interesting things 
    } 
    $counter++; 
} 
Verwandte Themen