Включите «требуемые вопросы» в случайном порядке

Я выбираю набор случайных вопросов без каких-либо дубликатов, используя следующее:

<?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 случайных вопросов.

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

Вопрос не указывает, но все это говорит о том, что это расширенные настраиваемые поля, созданные с помощью дополнения Repeater .

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

acf config

Обратите внимание, что здесь я использую $repeater_row['title'] вместо $repeater_row['question'] OP. Кроме того, я удалил часть 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>"; } 

Сначала вам нужно отфильтровать требуемые вопросы следующим образом:

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

Надеюсь, я снова помог тебе: p