仅显示随机数组中特定数量的问题

  • 本文关键字:问题 显示 随机 数组 php
  • 更新时间 :
  • 英文 :


随机化函数在随机问题数组中工作正常。 每次随机化工作时,我们如何通过"N"个数字选择要从数组中删除的特定数量。 表示我们希望每次在随机模式下显示 100 个问题列表中的 20% 或 20% 的问题

public function random_questions( $quiz_questions, $quiz_id ) {
if ( get_post_meta( $quiz_id, '_lp_random_mode', true ) == 'yes' ) {
// get user meta random quiz
$random_quiz = get_user_meta( get_current_user_id(), 'random_quiz', true );
if ( is_admin() || empty( $random_quiz ) || empty( $random_quiz[ $quiz_id ] ) ) {
return $quiz_questions;
}
$questions = array();
if ( array_key_exists( $quiz_id, $random_quiz ) && sizeof( $random_quiz[ $quiz_id ] ) == sizeof( $quiz_questions ) ) {
foreach ( $random_quiz[ $quiz_id ] as $question_id ) {
if ( $question_id ) {
$questions[ $question_id ] = $question_id;
}
}
} else {
$question_ids = array_keys( $quiz_questions );
shuffle( $question_ids );
$random_quiz[ $quiz_id ] = $question_ids;
$questions               = array();
foreach ( $question_ids as $id ) {
$questions[ $id ] = $quiz_questions[ $id ];
}
}
return $questions;
}
return $quiz_questions;
}

使用array_rand()获取随机选择的数组键,而不是将所有键与array_keys()一起使用。然后就没有必要洗牌数组了。

$question_ids = array_rand( $quiz_questions , 20);
$random_quiz[ $quiz_id ] = $question_ids;
$questions               = array();
foreach ( $question_ids as $id ) {
$questions[ $id ] = $quiz_questions[ $id ];
}

最新更新