在一次采访中,我被要求改组一个有价值的关联数组。
$card = array (
"car"=>1,
"bus"=>2,
"truck"=>3,
);
等。
使用在0,1
;
他们让我不要使用任何内置的PHP函数。
input: associative array;
output: randomly sequenced associative array;
谢谢&此致
答案 0 :(得分:2)
内置的shuffle()
无法很好地处理关联数组,因此您需要对数组键进行随机播放,然后重新构建数组。
我使用Fisher-Yates-Knuth算法来执行改组,这实际上是解决方案的关键。
function myshuffle($arr)
{
// extract the array keys
$keys = [];
foreach ($arr as $key => $value) {
$keys[] = $key;
}
// shuffle the keys
for ($i = count($keys) - 1; $i >= 1; --$i) {
$r = mt_rand(0, $i);
if ($r != $i) {
$tmp = $keys[$i];
$keys[$i] = $keys[$r];
$keys[$r] = $tmp;
}
}
// reconstitute
$result = [];
foreach ($keys as $key) {
$result[$key] = $arr[$key];
}
return $result;
}
答案 1 :(得分:-2)
$words = array("adumbrate","antipathy","aspersion","assiduous","cacophony","conundrum");
$rand_word_index = array_rand($words); // Get any random index from an array
// Original Word
$rand_word = $words[$rand_word_index]; // Stored array value basis of random index
$shuffled = str_shuffle($rand_word); // Shuffle this value or word
echo $shuffled;