我是stackoverflow的新手,所以如果这个问题很愚蠢,请随意删除它:
这样做的主要目的是在每次刷新时在页面上随机显示详细信息列表,但详细信息在不同的数组中,所以我有两个数组,我必须以相同的方式随机化。
示例:
$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);
但我的老师并不兴奋,因为代码很混乱,因为有很多传输(在随机化之前将细节转移到新数组中,以及在随机化之后将新数组重新转移到细节中)。他想让我只用这两个数组。
发布于 2012-02-01 19:25:05
你所做的,是一种正确的做事方式。这样看吧。你到底想要达到什么目的?你想要一组随机排序的数据(好吧,排序在这里不是正确的词,但你得到了它)。每当您谈到数据的任何类型的重新排序时,我们谈论的都是更改元素出现的顺序。这里的元素既不是'name',也不是'age‘。这里的元素是'person‘。因此,您的数据列表应该是“person”的列表,您可以对其进行重新排序,而不是放在两个松散耦合的数组中。
不管怎样,如果你一定要这样做的话。这就是我的建议。
假设有两个数组$A
和$B
。让它们都有N
元素。您要做的是,创建一个数组$nums
,其中包含从0
到N-1
的元素。
$nums = array(0, 1, 2 ... N-1)
现在,对$sums
数组进行混洗。所以,假设我们有这样的东西:
$num = (3, 4, 1, 2)
好的,我们在这里创建了一个映射,
$num =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个以上的数组,或者是一个数组的数组,以防您不确定需要处理多少个数组。如果你有任何问题,请随时提出来...
发布于 2012-02-01 19:21:36
您应该使用关联数组。
$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 );
}
https://stackoverflow.com/questions/9094871
复制相似问题