我是stackoverflow的新手,所以如果它是愚蠢的,请随意删除这个问题:
这样做的主要目的是每次刷新时随机显示页面上的详细信息列表,但细节位于不同的数组中,所以我有2个数组,我必须以相同的方式随机化,
示例:
$Name[0]=John;
$Name[1]=Lucy;
$Name[2]=Mike;
$Age[0]=18;
$Age[1]=20;
$Age[2]=25;
随机化后成为:
$Name[2]=Mike;
$Name[0]=John;
$Name[1]=Lucy;
$Age[2]=25;
$Age[0]=18;
$Age[1]=20;
我尝试使用“ - >”,例如:
$Array[0]->name = 'John';
$Array[0]->age = '18';
$Array[1]->name = 'Lucy';
$Array[1]->age = '20';
shuffle($Array);
但我的老师并不高兴,因为代码很乱,因为有很多转移(在随机化之前将详细信息放入新数组中,随机化之后将新数组转换回细节)。他希望我只用2个阵列来做。
答案 0 :(得分:3)
你在做什么,是一种正确的做事方式。以这种方式看待它。你到底想要达到什么目的?你想要一组随机排序的数据(好吧,排序在这里不是正确的词,但你得到它)。每当你谈论任何类型的数据重新排序时,我们都会讨论改变元素出现的顺序。这里的元素既不是“名字”,也不是“年龄”。你的元素是'人'。所以,你的数据列表应该是一个'人的列表,你可以重新排序,而不是两个松散耦合的数组。
无论如何,如果你绝对必须这样做。这就是我的建议。
让两个数组$A
和$B
。让他们都有N
元素。你要做的是,创建一个数组$nums
,其中包含从0
到N-1
的元素,即
$nums = array(0, 1, 2 ... N-1)
现在,随机播放$sums
数组。所以,假设我们有类似的东西:
$num = (3, 4, 1, 2)
好的,我们在这里创建了一个映射,
$ num [0] = 3
表示第0个元素为3,您可以将其解释为in the new array, the 0th element should be the 3rd element of the old array
。为此,运行一个简单的循环:
for($i=0; $i<N; $i++) {
$A2[$i] = $A[$num[$i]];
$B2[$i] = $B[$num[$i]];
}
如果你坚持认为这是一个在线解决方案(一种修改原始数据结构而不是构建一个新解决方案的解决方案),这是一项具有挑战性的任务,但我会留下问你(想想交换数据元素)根据我们刚创建的地图)。此外,如果您不确定需要处理多少个数组,您可以轻松地将其扩展到2个以上的数组或数组数组。随意问你可能有的任何问题......
答案 1 :(得分:0)
您应该使用关联数组。
$people = array('John' => 18, 'Lucy' => 20, 'Mike' => 25);
return shuffle_assoc($people);
function shuffle_assoc( $array )
{
$keys = array_keys( $array );
shuffle( $keys );
return array_merge( array_flip( $keys ) , $array );
}