使用php以相同的方式随机制作2个数组

时间:2012-02-01 11:17:18

标签: php arrays

我是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个阵列来做。

2 个答案:

答案 0 :(得分:3)

你在做什么,是一种正确的做事方式。以这种方式看待它。你到底想要达到什么目的?你想要一组随机排序的数据(好吧,排序在这里不是正确的词,但你得到它)。每当你谈论任何类型的数据重新排序时,我们都会讨论改变元素出现的顺序。这里的元素既不是“名字”,也不是“年龄”。你的元素是'人'。所以,你的数据列表应该是一个'人的列表,你可以重新排序,而不是两个松散耦合的数组。

无论如何,如果你绝对必须这样做。这就是我的建议。

让两个数组$A$B。让他们都有N元素。你要做的是,创建一个数组$nums,其中包含从0N-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 );
}