如何手动洗牌for循环中的数组?

How to shuffle the arrays in for loop manually?

我写了 2 段代码来打乱一些在 for 循环中的数组
第一:

$numbers = range(0, sizeof($array_id)-1);
shuffle($numbers);
foreach ($numbers as $number) {
$arr = array("user" => array("id" => $array_id[$number], "name" => $array_name[$number], "key" => $array_key[$number]));
}
echo json_encode($arr);

这个有一个大问题,那就是如果其中一个数组中的 $number 等于 5,则它不会循环将 $number 的另一个结果放入该数组中,例如结果将是这样的:

{"user":{"id":["18","2","36"],"name":["alex","john"],"key":["159","228,"486,"852"]]}}

我的所有数组中都有 5 个值,您可以看到它返回了它们 defectively.I 如果有人能告诉我为什么 $number 通过 shuffle 获得范围内的最大值,将不胜感激array 得到 $number 库存?


第二个:

function shuffle_assoc(&$array) {
    if (shuffle($array)) { 
        return $array; 
    }else{ 
        return FALSE; 
         } 
    }
for ($y=0; $y<sizeof($array_id); $y++) {
    $arr = array("user" => array("id" => shuffle_assoc($array_id), "name" => shuffle_assoc($array_name), "key" => shuffle_assoc($array_key)));
    }
echo json_encode($arr);

这个工作正常但我希望 idname 匹配我的意思是他们洗牌相同(if $array_id[2] then array_name[2]) 这就是为什么我为这个写了第一个 code.anyway 如果有人知道如何使 idname 洗牌相同我'我会很感激的。(抱歉,如果我在写作时有错误,我的第一语言不是英语,但我喜欢英语 :)

我不确定我是否完全理解你的意思,但是

$numbers = range(0, 5);
// $number = array(0, 1, 2, 3, 4, 5)

All of my arrays have 5 values

$array_id[0]
$array_id[1]
$array_id[2]
$array_id[3]
$array_id[4]

所以你还没有$array_id[5]。我想你需要 $numbers = range(0, 4);

编辑:

再一次,我不确定你是否希望发生这种情况。

<?php
$array_id = array(1,2,3,4,5);
$array_name = array('a','b','c','d','e');
$numbers = range(0, 4);
shuffle($numbers);
$arr = array();
foreach ($numbers as $number) {
$arr["id"][] = $array_id[$number];
$arr["name"][] = $array_name[$number];
}
$arr2 = array("user" => array("id" => $arr["id"], "name" => $arr["name"]));
echo json_encode($arr2);

?>