PHP shuffle数字索引对象数组保留键值

时间:2016-06-06 15:49:29

标签: php arrays

我有这样的数组。

yang

我希望通过保留键值对并且不混合每个键来对该数组进行混洗。所以基本上A [0]将是A [1](只有2个索引,只是示例,它应该是随机的),包含所有子键值等。

我该怎么做?感谢

3 个答案:

答案 0 :(得分:1)

只需随机化数组的索引,无需关心存储为数组元素的对象的特定字段。

public function randomObj(A)
{
    $index = rand(0, 1);
    return A[$index];
}

在这里添加一个额外的解释:shuffle意味着您交换一定数量的对象(将对象的索引更改为数组中的元素),而randomize意味着您随机获取一个对象(无需更改索引)对象,但是当你想得到一个时,它会返回一个随机对象)。

答案 1 :(得分:1)

您可以循环遍历数组,然后随机交换其中的值。

for($x=0;$x<count($array);$x++){
    $temp=$array[$x];
    $index=rand(0,count($array)-1);
    $array[x]=$array[$index];
    $array[$index]=$temp;
}

下面的工作示例。

<?php
$array=array();
$array[0]['name'] = "John";
$array[0]['lastname'] = "Blabla";
$array[0]['genre'] = "Male";
$array[1]['name'] = "Cheryl";
$array[1]['lastname'] = "Blabla";
$array[1]['genre'] = "Female";
$array[2]['name'] = "Amy";
$array[2]['lastname'] = "Blabla";
$array[2]['genre'] = "Female";
$array[3]['name'] = "Adam";
$array[3]['lastname'] = "Blabla";
$array[3]['genre'] = "Female";
$array[4]['name'] = "Hitan";
$array[4]['lastname'] = "Blabla";
$array[4]['genre'] = "Male";
$array[5]['name'] = "Mary";
$array[5]['lastname'] = "Blabla";
$array[5]['genre'] = "Female";

for($x=0;$x<count($array);$x++){
    $temp=$array[$x];
    $index=rand(0,count($array)-1);
    $array[$x]=$array[$index];
    $array[$index]=$temp;
}

var_dump($array);

答案 2 :(得分:0)

此函数返回具有混乱迭代顺序的相同数组:

function kshuffle($a) {
  $k = array_keys($a);
  shuffle($k);
  $res = [];
  foreach($k as $index) $res[$index] = $a[$index];
  return $res;
}

print_r(kshuffle(['a', 'b', 'c', 'd', 'e', 'f', 'g']));

Array
(
    [4] => e
    [1] => b
    [3] => d
    [0] => a
    [6] => g
    [5] => f
    [2] => c
)

因此,它会产生混乱序列,而我们用foreach迭代结果 如果您想要json_encode结果:{"1": "b", "0": "a"},它还会生成哈希表/对象。但是要小心,如果随机返回未调整的序列(这个事件总是有可能),它将是普通数组:['a', 'b']没有JSON_FORCE_OBJECT标志。