我有这样的数组。
yang
我希望通过保留键值对并且不混合每个键来对该数组进行混洗。所以基本上A [0]将是A [1](只有2个索引,只是示例,它应该是随机的),包含所有子键值等。
我该怎么做?感谢
答案 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
标志。