【问题标题】:shuffle() doesn't work as expected with an associative arrayshuffle() 不能按预期使用关联数组
【发布时间】:2015-05-18 14:54:11
【问题描述】:

我想做一个测验,这是我的数组:

$questions = array("1+1"=>2,"5+2"=>7,"5+9"=>14,"3+5"=>8,"4+6"=>10,"1+8"=>9,"2+7"=>9,
                   "6+7"=>13,"9+3"=>12,"8+2"=>10,"5+5"=>10,"6+8"=>14,"9+4"=>13,"7+8"=>15,
                   "8+9"=>17,"4+8"=>12,"7+1"=>8,"6+3"=>9,"2+5"=>7,"3+4"=>7);

shuffle($questions);

foreach($questions as $key => $value) {
     echo $key.' ';
}

但是,从上面的代码中,我得到如下输出:

0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 //Wrong!

为什么我会得到这个输出?我想得到每一个问题。我应该如何获得它?

【问题讨论】:

    标签: php arrays associative-array shuffle


    【解决方案1】:

    来自shuffle() 的手册(强调我的):

    注意:此函数为数组中的元素分配新键。它将删除任何可能已分配的现有键,而不仅仅是重新排序键。

    这是来自该页面comments 的关联数组的解决方案:

    function shuffle_assoc(&$array) {
        $keys = array_keys($array);
    
        shuffle($keys);
    
        foreach($keys as $key) {
            $new[$key] = $array[$key];
        }
    
        $array = $new;
    
        return true;
    }
    

    致谢:“ahmad at ahmadnassri dot com”

    【讨论】:

      【解决方案2】:

      ¿洗牌关联数组?这对我有用:

       function shuffle_assoc($array) {
          $keys = array_keys($array);
          shuffle($keys);
          foreach($keys as $key) {
              $new[$key] = $array[$key];
          }
          return $new;
      }
      

      用途:

      Print_r(shuffle_assoc($my_array));
      

      输入:

      $my_array = Array
                      (
                        [Nicaragua] => 62
                        [Mexico] => 50
                        [France] => 23
                       )
      

      输出:

      Array
      (
          [France] => 23
          [Nicaragua] => 62
          [Mexico] => 50
      )
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-09-02
        • 1970-01-01
        相关资源
        最近更新 更多