2013-03-26 25 views
7

Tôi chọn một tập hợp các câu hỏi ngẫu nhiên mà không cần bất kỳ bản sao sử dụng như sau:Bao gồm "những câu hỏi yêu cầu" trong một lựa chọn ngẫu nhiên

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

Mỗi câu hỏi có một lĩnh vực: get_field('required_question'); mà có một yes/no thả xuống. Các câu hỏi đã chọn có LUÔN LUÔN phải được kết hợp vào vòng lặp ở trên.

Ví dụ: Bài kiểm tra có 20 câu hỏi để chọn, 10 câu hỏi sẽ được chọn ngẫu nhiên. Trong 20 câu hỏi, có 2 câu hỏi bắt buộc (các câu hỏi này sẽ luôn được chọn). Vì vậy, nó sẽ cần phải lấy 2 câu hỏi cần thiết và chọn 8 câu hỏi ngẫu nhiên khác.

Tôi có thể bao gồm các câu hỏi bắt buộc trong lựa chọn ngẫu nhiên như thế nào?

+0

Các câu hỏi được kết nối với trường 'required' như thế nào? Chúng ta có thể xem biểu mẫu không? – xpy

+0

Như tôi có thể thấy đó là một loạt câu hỏi, vì vậy bạn có thể chỉ cần yêu cầu các câu hỏi cần thiết và thêm chúng vào mảng – ahmad

Trả lời

3

Các Câu hỏi không rõ nó, nhưng tất cả cho thấy đây là một Advanced Custom Fields thiết lập bằng cách sử dụng Repeater Add-on.

Trong trường hợp đó, đây là cấu hình thử nghiệm tôi đã thực hiện:

acf config

Lưu ý rằng ở đây tôi đang sử dụng $repeater_row['title'] thay vì của $repeater_row['question'] OP. Ngoài ra, tôi đã xóa phần answer_options. Xem nhận xét để biết chi tiết:

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

Trước tiên, bạn cần phải lọc ra những câu hỏi cần thiết như vậy:

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

Hy vọng tôi đã giúp bạn một lần nữa: p

+0

Tôi đã chỉnh sửa câu trả lời của bạn, nó bao gồm mã trường bắt buộc chính xác ngay bây giờ nhưng nó vẫn không bao gồm 2 câu hỏi bắt buộc trong 5 lựa chọn ngẫu nhiên. – Rob

+0

'get_field (" required_question ")' không chỉ định câu hỏi nào. Tôi không chắc mình hiểu cách hàm 'get_field' của bạn hoạt động như thế nào ... –

+0

get_field (" required_question ") chỉ là lấy câu hỏi trong Wordpress là bắt buộc hay không (danh sách thả xuống có thể là có hoặc không). Đó là lý do tại sao tôi nghĩ rằng nó cần một cái gì đó như nếu (get_field ("required_question") == "Có"). Tôi đoán chỉ coi nó là một biến có thể có hoặc không có giá trị. – Rob

Các vấn đề liên quan