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

时间:2016-07-05 20:12:12

标签: php arrays json random shuffle

我写了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个值,你可以看到它有缺陷地返回它们。如果有人能告诉我为什么$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] )这就是为什么我写第一个代码的原因。如果有人知道如何让idname洗牌,那么我会很感激。(对不起,如果我在我的写作中有错误,我的第一语言不是英语,但我喜欢英语:)

1 个答案:

答案 0 :(得分:0)

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

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

我的所有数组都有5个值

它的

$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);

?>