【问题标题】:randomise array elements preserving assoc key value pairs随机化保留关联键值对的数组元素
【发布时间】:2014-03-18 08:05:12
【问题描述】:

我正在构建一个测验应用程序。很直接。只剩下最后一点,我被卡住了。我想随机化答案选项。检查查看代码中我在 CAPS 中遇到问题的注释。 Shuffle 正在工作,但它正在将 assoc 数组更改为数字 0 1 等。 array_rand 使 foreach 无法工作和 foreach 抛出错误。提供的参数无效。 不知道怎么回事,谁能帮帮我。。

        <form action="<?php echo URL?>load=quiz&page=<?php echo $page; ?>" method="post" name="quiz">
        <?php //var_dump($quiz_data); 
            $all_ans_opts = array();
            $ans_opts = array_filter($all_ans_opts);;


        ?>
        <?php foreach($quiz_data as $d):

                $all_ans_opts['answer_a'] = $d['answer_a'];
                $all_ans_opts['answer_b'] = $d['answer_b'];
                $all_ans_opts['answer_c'] = $d['answer_c'];
                $all_ans_opts['answer_d'] = $d['answer_d'];
                $all_ans_opts['answer_e'] = $d['answer_e'];

       ?>
        <!-- If the question type is MC show the radio form-->


        <p>                    
        Question <?php echo $d['question_number']; ?>: <?php echo $d['question_title'] ; ?>
        </p>
        <p>
           <input type="hidden" name="page_num" value="<?php echo $page; ?>">
           <input type="hidden" name="question_number" value="<?php echo $d['question_number']; ?>">
           <input type="hidden" name="questionid" value="<?php echo $d['questionid']; ?>">
           <input type="hidden" name="quiz_number" value="<?php echo $d['quiz_number']; ?>">

        <?php
        endforeach; 

        //var_dump($all_ans_opts);



            ?>
               <?php 
// HERE I AM TRYING TO RANDAMISE THE ARRAY ELEMENTS PRESERVING KEY VALUE PAIRS FOR FOREACH
// FOR RANDAMISATION IF I USE SHUFFLE IT WORKS BUT CHANGING THE KEY FROM ASSOCIATIVE TO //INDEX 0 1 ETC.. 
// IF I USE ARRAY_RAND FUNCTION FOREACH GIVES ERROR- nvalid argument supplied for foreach()

               $ans_opts = array_filter($all_ans_opts);
               shuffle($all_ans_opts);                     
               //$ans_opts = array_rand($all_ans_opts);

           ?>

           <?php foreach ($ans_opts as $key=>$val){ ?>

            <input type="radio" name="<?php echo 'answer_selected';?>" value=<?php echo $key ?>><?php echo $val; ?><br/>

           <?php } ?>
        </p>


        <input type="submit" name="prev" value="Previous Question" <?php if($page == 0) echo "disabled";?> />                
        <input type="submit" name="save" value="<?php if($page == $totalQuestion-1)echo 'Submit Quiz'; else{echo 'Save & Continue';} ?>" />
        <input type="submit" name="next" value="Next Question" <?php if($page == $totalQuestion-1) echo "disabled";?> />
    </form>  

【问题讨论】:

标签: php arrays


【解决方案1】:

简单的方法是使用uasort() - 它在排序时保留键。要随机化,只需使用随机排序:

$array = [
  'foo'=>14,
  'bar'=>10,
  'baz'=>19,
  'bee'=>26,
  'feo'=>23
];

uasort($array, function($x,$y)
{
   //you can use `return mt_rand(0,1)` - but that's
   //unreliable, since compare function must return -1/0/1
   return mt_rand() - mt_rand();
});

【讨论】:

    【解决方案2】:

    我在手册中找到了一个功能:

    http://pl1.php.net/shuffle#94697

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-18
      • 1970-01-01
      • 2010-10-23
      • 1970-01-01
      • 1970-01-01
      • 2019-01-31
      相关资源
      最近更新 更多