gpt4 book ai didi

php - 随机播放函数不随机播放数组元素 (PHP)

转载 作者:可可西里 更新时间:2023-10-31 23:36:01 26 4
gpt4 key购买 nike

我正在通过阅读一本书来学习 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"=> "华盛顿"];
我在 PHP 交互式 shell 中测试了这个函数(shuffleX() 已重命名,因为我无法重新定义已经定义的函数,所以我在编辑某些内容时复制粘贴并更改名称):
enter image description here


我解决问题的尝试(不一定按时间顺序排列)

  • 我确认交换正在工作,并且它确实交换了关联数组的键值关联:
    enter image description here

  • 我确认 array_keys() 返回数组的键:
    enter image description here

  • 我确认我可以使用 array_keys() 访问数组元素:
    enter image description here

  • 我确认 rand() 可以为小尺寸数组生成随机值:
    enter image description here

在这一点上,我决定我花了太多时间仔细阅读我的代码,我应该寻求帮助。

最佳答案

您的 shuffleX 函数按值接受数组。为了让调用者看到它的修改,它需要通过引用接受数组:function shuffleX(&$arr)

关于php - 随机播放函数不随机播放数组元素 (PHP),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54016119/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com