2016-04-23 11 views
-2

、それが位置順に質問を生成するために、次のコードを使用しています:移動 - 私が持っているシステムについてはPHP

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

は私が行うことができるようにしたいしたいが、各質問IDです前の質問IDと次の質問IDにアクセスする。だから私が例えば3の位置を持っている質問id 1にいるなら、私は2の位置を持つquestion id 3と4の位置を持つquestion id 5にアクセスしたいと思っています。

+1

私たちはあなたのクラスと実際に何をしたいかについての詳細がなければ、それをどうやって行うのか分かりません。 [**ここに質問する方法**](http://stackoverflow.com/questions/how-to-ask)をお読みください。 –

答えて

0

配列は、順次配列であるONLY場合は、次のコードが動作する必要がある場合:最初の反復では、あなたはまだ$ keyPrevとその$を計算しようとしているので、

$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>"; 
} 

$keyPrevを使用する前にif ($key > 0)をチェックすることを忘れないでくださいkeyPrevは無効です。

+0

これは、正しい値を受け取っていない理由を説明するかもしれません。実際の質問ID値ではなく、for-eachループのインデックスを受け取っているようです。アンケートの各質問セットには固有のポジション番号があるため、各ポジションでwhereステートメントを実行して質問IDを取得できますか?これは、ユーザーがアップまたはダウンボタンをクリックするとそのことになります。私が試して、逐次的な方法に変換すると、おそらくかなり面倒だろう。 – userrandomuser

+0

@userrandomuser良いチャンスがあります。おそらく、配列の作成方法によって異なります。あなたはsortBy関数に行って、それが作成時に連続的になるようにしてください。そしてそれも解決しなければなりません:) – Webeng

+0

OK。私は質問idsではなく、ポジション番号でこれに似た何かをすることに決めました。このアプローチは機能します。ありがとうございました! – userrandomuser

0

array_keys()を使用して配列のキーを取得し、次に通常通りforeachを使用します。カウンターを使用して、現在どのキーを追跡しているかを把握してください。これは、非数値インデックスでも機能します。

$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++; 
} 
関連する問題