2013-03-26 112 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

问题如何与'required'字段相关联?我们能看到表格吗? – xpy 2013-03-31 17:12:16

+0

正如我所见,这是一系列问题,所以您可以简单地请求所需的问题并将它们添加到数组中 – ahmad 2013-04-03 20:24:35

回答

3

的问题没有说明,但一切都表明这是一个Advanced Custom Fields使用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

首先,您需要过滤掉,像这样要求的问题:

$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

我已对您的答案进行了编辑,它现在包含正确的必填字段代码,但它仍未包括随机选择的5个必需的问题。 – Rob 2013-03-26 16:30:16

+0

'get_field(“required_question”)'没有指定哪个问题。我不确定我明白你的'get_field'函数是如何工作的... – 2013-03-26 16:31:09

+0

get_field(“required_question”)只是抓住WordPress中的问题是否需要(下拉可以是或不是)。这就是为什么我认为它需要像if(get_field(“required_question”)==“是”)。我想只是把它当作一个可以有或没有值的变量。 – Rob 2013-03-27 09:51:15