2013-03-26 2 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');, который имеет да/нет выпадающего меню. Вопросы, которые выбрали yes, ВСЕГДА должны быть включены в цикл выше.

Например, у теста есть 20 вопросов для выбора, 10 будут выбраны случайным образом. В течение 20 вопросов есть 2 требуемых вопроса (т. Е. Они всегда будут выбраны). Поэтому вам нужно будет взять 2 требуемых вопроса и выбрать еще 8 случайных вопросов.

Как включить требуемые вопросы в случайный выбор?

+0

Как связаны вопросы с полем 'required'? Можем ли мы увидеть форму? – xpy

+0

Как я вижу, это множество вопросов, поэтому вы можете просто запросить требуемые вопросы и добавить их в массив. – ahmad

ответ

3

Вопрос не указывается, но все говорит это Advanced Custom Fields настройте с помощью Repeater Add-on.

В этом случае, это тестовая конфигурация я сделал:

acf config

Обратите внимание, что здесь я использую $repeater_row['title'] вместо ОП-х $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

Прежде всего, необходимо отфильтровать необходимые вопросы, как так:

$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) { 
    ... 
} 

Надежда Я снова помог вам: р

+0

. Я внесли изменения в ваш ответ, теперь он содержит правильный код поля, но он все еще не включают в себя 2 требуемых вопроса в 5 выбранных случайным образом. – Rob

+0

'get_field (" required_question ")' не задает вопрос. Я не уверен, что понимаю, как работает ваша функция get_field ... –

+0

get_field («required_question») просто захватывает вопрос, нужен ли вопрос в Wordpress или нет (выпадающее меню может быть да или нет). Вот почему я подумал, что нужно что-то вроде if (get_field («required_question») == «Да»). Я предполагаю, что просто рассматриваю его как переменную, которая может иметь значения «да» или «нет». – Rob

Смежные вопросы