2013-03-26 9 views
7

mam Wybieranie zestaw losowych pytań bez żadnych duplikatów przy użyciu następujących:to „wymagane pytania” w losowo wybranych

<?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 />"; 
    } 
} 
?> 

Każde pytanie ma pole: get_field('required_question'); który ma tak/nie rozwijanej. Pytania, które wybrano tak ZAWSZE, muszą zostać włączone do powyższej pętli.

E.g Test ma 20 pytań do wyboru, 10 zostanie wybranych losowo. W ramach 20 pytań są 2 wymagane pytania (tzn. Zawsze będą one wybrane). Więc będzie musiał pobrać 2 wymagane pytania i wybrać 8 innych losowych pytań.

Jak mogę dołączyć wymagane pytania do losowego wyboru?

+0

Jakie są pytania związane z polem "wymagane"? Czy widzimy formularz? – xpy

+0

Jak widzę, jest to szereg pytań, więc możesz po prostu zażądać wymaganych pytań i dodać je do tablicy – ahmad

Odpowiedz

3

Pytanie nie wskazuje, ale wszystko wskazuje, że jest to Advanced Custom Fields skonfigurować przy użyciu Repeater Add-on.

W tym przypadku jest to konfiguracja testy robiłem:

acf config

Zauważ, że tutaj używam $repeater_row['title'] zamiast OP $repeater_row['question']. Usunąłem również część answer_options. Zobacz komentarze do szczegółów:

// 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

Najpierw trzeba odfiltrować wymagane pytania tak:

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

nadzieję, że pomógł Ci znowu: p

+0

Dokonałem edycji Twojej odpowiedzi, zawiera ona prawidłowy wymagany kod pola, ale nadal nie ma dołącz 2 wymagane pytania w 5 losowo wybranych. – Rob

+0

'get_field (" required_question ")' nie określa, które pytanie. Nie jestem pewien, czy rozumiem, jak działa funkcja 'get_field' ... –

+0

get_field (" required_question ") po prostu chwyta, czy pytanie w Wordpress jest wymagane czy nie (lista rozwijana może być tak lub nie). Dlatego pomyślałem, że potrzebuje czegoś takiego, jak (get_field ("required_question") == "Yes"). Myślę, że po prostu traktuj to jako zmienną, która może mieć wartości tak lub nie. – Rob