在随机选择中包括"必需的问题"

Rob*_*Rob 7 php wordpress

我正在使用以下内容选择一组随机问题而没有任何重复:

<?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 />";
    }
}
?>
Run Code Online (Sandbox Code Playgroud)

每个问题都有一个字段:get_field('required_question');具有是/否下拉列表.选择"是"的问题总是必须纳入上面的循环中.

例如,测试有20个问题可供选择,10个将随机选择.在20个问题中,有2个必需的问题(即总是会选择这些问题).因此,它需要抓住2个必要的问题并选择其他8个随机问题.

如何在随机选择中包含所需的问题?

bra*_*ilo 3

问题没有说明,但都表明这是使用Repeater Add-on设置的高级自定义字段

在这种情况下,这是我所做的测试配置:

acf配置

请注意,这里我使用的是$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>";
}
Run Code Online (Sandbox Code Playgroud)