這個問題在這里已經有了答案: PHP 隨機洗牌陣列維護鍵 => 值 (10 個回答) 13 小時前關閉。
我正在嘗試將一些 python 代碼轉換為 PHP,但遇到了陣列鍵的問題。
我的代碼是這樣的:
<?php
$speciesarray = array("Amanita aprica"=>"species/Amanita_aprica.html",
"Amanita augusta"=>"species/Amanita_augusta.html",
"Amanita calyptratoides"=>"species/Amanita_calyptratoides.html",
"Amanita calyptroderma"=>"species/Amanita_calyptroderma.html",
"Amanita constricta"=>"species/Amanita_constricta.html",
"Amanita gemmata"=>"species/Amanita_gemmata.html",
"Amanita magniverrucata"=>"species/Amanita_magniverrucata.html",
"Amanita muscaria"=>"species/Amanita_muscaria.html",
"Amanita novinupta"=>"species/Amanita_novinupta.html",
"Amanita ocreata"=>"species/Amanita_ocreata.html",
"Amanita pachycolea"=>"species/Amanita_pachycolea.html",
"Amanita pantherina"=>"species/Amanita_pantherina.html",
"Amanita phalloides"=>"species/Amanita_phalloides.html",
"Amanita porphyria"=>"species/Amanita_porphyria.html",
"Amanita protecta"=>"species/Amanita_protecta.html",
"Amanita pruittii"=>"species/Amanita_pruittii.html",
"Amanita silvicola"=>"species/Amanita_silvicola.html",
"Amanita smithiana"=>"species/Amanita_smithiana.html",
"Amanita vaginata"=>"species/Amanita_vaginata.html",
"Amanita velosa"=>"species/Amanita_velosa.html",
"Amanita vernicoccora"=>"species/Amanita_vernicoccora.html");
shuffle($speciesarray); // Randomize the species array
$speciesarray = array_slice($speciesarray, 0, 5); // Select 5 elements from the randomized species array
reset($speciesarray);
$choice = key($speciesarray); // Get the first key from the reduced array
shuffle($speciesarray); // Randomize again
/* For debugging */
print_r($speciesarray);
echo("<br/>")
print_r($choice);
?>
這是我期待看到的:
Array ( [Amanita silvicola] => species/Amanita_silvicola.html [Amanita gemmata] => species/Amanita_gemmata.html [Amanita calyptratoides] => species/Amanita_calyptratoides.html [Amanita vaginata] => species/Amanita_vaginata.html [Amanita phalloides] => species/Amanita_phalloides.html )
Amanita silvicola
這就是我實際得到的:
Array ( [0] => species/Amanita_silvicola.html [1] => species/Amanita_gemmata.html [2] => species/Amanita_calyptratoides.html [3] => species/Amanita_vaginata.html [4] => species/Amanita_phalloides.html )
0
我究竟做錯了什么?
uj5u.com熱心網友回復:
從shuffle() 上的php 頁面:
注意:此函式為陣列中的元素分配新鍵。它將洗掉任何可能已分配的現有鍵,而不僅僅是重新排序鍵。
該頁面還有一個用戶貢獻的函式,用于在 shuffle 中保留密鑰:
<?php
function shuffle_assoc(&$array) {
$keys = array_keys($array);
shuffle($keys);
foreach($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
return true;
}
?>
在同一個 PHP 頁面上還有許多其他用戶貢獻的函式用于此場景
uj5u.com熱心網友回復:
問題是,這會shuffle()殺死您的命名鍵,并將您的陣列更改為數字索引陣列。因此,更好的解決方案是僅對陣列鍵進行混洗,選擇其中的五個,然后選擇與所選鍵關聯的值:
$keys = array_keys( $speciesarray );
shuffle( $keys );
$keys = array_slice( $keys, 0, 5 );
$result = [];
foreach ( $keys as $key ) {
$result[ $key ] = $speciesarray[ $key ];
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/387209.html
上一篇:源有5個元素,但目標只允許0
