programing

무작위 선택에 "필수 질문" 포함

magicmemo 2023. 6. 15. 21:47
반응형

무작위 선택에 "필수 질문" 포함

다음을 사용하여 중복되지 않는 무작위 질문 집합을 선택합니다.

<?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개의 임의 질문을 선택해야 합니다.

임의 선택 항목에 필요한 질문을 포함하려면 어떻게 해야 합니까?

질문에 명시되어 있지 않지만 반복기 추가 기능을 사용하여 설정된 고급 사용자 정의 필드라는 것이 모두 표시됩니다.

이 경우 테스트 구성은 다음과 같습니다.

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

먼저 다음과 같은 필수 질문을 걸러내야 합니다.

$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

언급URL : https://stackoverflow.com/questions/15638373/include-required-questions-in-a-random-selection

반응형