簡體   English   中英

shuffle() 在關聯數組中無法按預期工作

[英]shuffle() doesn't work as expected with an associative array

我想做一個測驗,這是我的數組:

$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!

為什么我得到這個輸出? 我想得到每一個問題。 我應該如何得到它?

來自shuffle()的手冊(強調我的):

注意:此函數為 array 中的元素分配新鍵 它將刪除任何可能已分配的現有鍵,而不僅僅是重新排序鍵。

這是該頁面評論中關聯數組的解決方案:

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”

¿洗牌關聯數組? 這對我有用:

 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
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM