2013-03-26 13 views
7

私は、次を使用して、任意の重複することなく、ランダムな質問のセットを選択しています:ランダムに選択して「必要な質問に」含める

<?php 
$amount = get_field('select_number_of_questions'); 
$repeater = get_field("step_by_step_test"); 
shuffle($repeater); 
$repeater_limit = array_slice($repeater,0,$amount); 
foreach($repeater_limit as $repeater_row) { 
    echo "<p>".$repeater_row['question']."</p>"; 
    $rows = $repeater_row['answer_options']; 
    foreach($rows as $row) { 
     echo $row['answer']."<br />"; 
    } 
} 
?> 

各質問は、フィールドがあります。get_field('required_question');はい/いいえドロップダウンがあります。はいを選択した質問は上記のループに組み込む必要があります。

例:テストには20個の質問があり、10個はランダムに選択されます。 20の質問の中に2つの必要な質問があります(つまり、常に選択されます)。したがって、2つの必要な質問を取り、8つのランダムな質問を選択する必要があります。

どのようにランダムな選択内に必要な質問を含めることができますか?

+0

質問は「必須」フィールドとどのように関連していますか?フォームを見ることはできますか? – xpy

+0

これは一連の質問ですので、必要な質問をリクエストして配列に追加するだけです。 – ahmad

答えて

3

質問は、それを述べていないが、すべてが、これはAdvanced Custom Fieldsであることを示唆している:

$all_questions = get_field("step_by_step_test"); 
$required = $optional = array(); 
foreach($all_questions as $question) { 
    if($a['required_question']) $required[] = $question; 
    else $optional[] = $question; 
} 
$amount = get_field("select_number_of_questions")-count($required); 
shuffle($optional); 
$final = array_merge($required,array_slice($optional,0,$amount)); 
foreach($final as $repeater_row) { 
    ... 
} 

希望は私は再びあなたを助けましたRepeater Add-onを使用して設定します。

acf config

注ここで私が代わりに$repeater_row['title']を使用していOPの$repeater_row['question']:その場合は

が、これは私がやったテストの構成です。また、 answer_options部分を削除しました。詳細については、コメントを参照してください。

// Get fields 
$amount = get_field('select_number_of_questions'); 
$repeater = get_field('step_by_step_test'); 

// Auxiliary arrays to separate fields by Field Name 
$not_enabled = array(); 
$enabled = array(); 

// Separate 
foreach($repeater as $field) 
{ 
    if('no' == $field['enabled']) 
     $not_enabled[] = $field; 
    else 
     $enabled[] = $field; 
} 

// Discount the enabled from the the total amount 
$amount = (int)$amount - count($enabled); 

// Shuffle before slicing 
shuffle($not_enabled); 
$repeater_limit = array_slice($not_enabled, 0, $amount); 

// Add enabled fields and shuffle again 
$final_array = array_merge($repeater_limit, $enabled); 
shuffle($final_array); 

foreach($final_array as $repeater_row) { 
    echo "<p>" . $repeater_row['title'] . "</p>"; 
} 
3

まずあなたがそうのような必要な質問をフィルタリングする必要があります:P

+0

回答を編集しました。これには現在必要なフィールドコードが含まれていますが、それでも解決できません無作為に選ばれた5人に2つの必要な質問を含める。 – Rob

+0

'get_field(" required_question ")'はどの質問を指定していません。私はあなたの 'get_field'関数がどのように動作するかを理解していません... –

+0

get_field(" required_question ")は、Wordpressの質問が必要かどうかを把握しています(ドロップダウンはyesまたはnoです)。だから私はif(get_field( "required_question")== "Yes")のようなものが必要だと思ったのです。私はそれをyesまたはnoの値を持つ変数として扱うと思います。 – Rob

関連する問題