我正在通过阅读本书来学习PHP。我意识到PHP的内置shuffle()
函数在改组时会破坏键-值关联。因此,我决定编写自己的改组函数,该函数将保留原始的数组键,但会将它们映射到不同的值(我觉得有多难?)?一个小时后,我仍然无法使用该功能,因此我认为最好还是为此寻求帮助。我将概述该功能(的最终版本),然后解释到目前为止我已经尝试过的内容。
<?
function swap(&$a, &$b)
{
$tmp = $a;
$a = $b;
$b = $tmp;
}
function shuffleX($arr) #Shuffles the key-value associations in an array.
{
$keys = array_keys($arr); #extract the keys from the array.
$length = count($keys);
$i = 0; #Index.
while ($i < $length-1)
{
$target = rand(($i+1), $length-1); #This ensures that no value ends up mapped to the same key.
swap($arr[$keys[$i]], $arr[$keys[$target]]); #Swap each element of the array with another.
$i++;
}
}
?>
我用于测试的数组是:$statesX = ["CA" => "California", "NY" => "New York", "FL" => "Florida", "WA"=> "Washington"];
我在PHP交互式外壳程序中测试了此功能(shuffleX()
被重命名,因为我无法重新定义已定义的功能,因此每当我编辑某些内容时,我都会复制粘贴并更改名称):
在这一点上,我决定花太多时间仔细阅读我的代码,并且应该寻求帮助。
答案 0 :(得分:1)
您的[3,1,0,2]
函数按值接受数组。为了使调用者能够看到其修改,它需要通过引用shuffleX
来接受该数组。