php - 以同样的方式,Shuffle 2 php数组

  显示原文与译文双语对照的内容
0 0

我有一个例子:


$array['one'][0] = 0;
$array['one'][1] = 1;
$array['one'][2] = 2;
$array['one'][3] = 3;

$array['two'][0] = 00;
$array['two'][1] = 11;
$array['two'][2] = 22;
$array['two'][3] = 33;

如何让它们都洗牌以获得类似的内容:


$array['one'][0] = 2;
$array['one'][1] = 1;
$array['one'][2] = 3;
$array['one'][3] = 0;

$array['two'][0] = 22;
$array['two'][1] = 11;
$array['two'][2] = 33;
$array['two'][3] = 00;

或者任何其他随机顺序,但在同时具有相同的"随机因子"?

例如我希望 $array['one'][0]$array['two'][0] 被打乱,以获得 $array['one'][x]$array['two'][x] ( x 是一个随机键,但在两个数组上相同) 。

时间: 原作者:

0 0

像这样的东西可以工作。 它类似于回答mimikry除了这个工作即使你碰巧有重复的值在 array ( 这一项不使用 array的值作为临时 array的键) 之一。

假设两个数组的大小相同。


$c = count($array['one']);
$tmp = array();
for ($i=0; $i<$c; $i++) {
 $tmp[$i] = array($array['one'][$i], $array['two'][$i]);
}
shuffle($tmp);
for ($i=0; $i<$c; $i++) {
 $array['one'][$i] = $tmp[$i][0];
 $array['two'][$i] = $tmp[$i][1];
}

原作者:
0 0

$count = count($array['one']);
$order = range(1, $count);

shuffle($order);
array_multisort($order, $array['one'], $array['two']);

  • 使用具有任意类型( 对象和数组) 元素的数组。
  • 这种方法可以与任意数量的数组( 不仅两个) 一起使用。
  • 使用重复值。
  • 清理代码。
原作者:
0 0

希望你能正确。

对于上面的示例,这里代码应该能够。 但这真是。


$array['one'][0] = 'A';
$array['one'][1] = 'B';
$array['one'][2] = 'C';
$array['one'][3] = 'D';

$array['two'][0] = 'AA';
$array['two'][1] = 'BB';
$array['two'][2] = 'CC';
$array['two'][3] = 'DD';

//save the dependencies in tmp array
foreach ($array['two'] as $key => $val) {
 $tmp[$array['one'][$key]] = $val;
}

shuffle($array['one']);

//restore dependencies in tmp2 array
foreach ($array['one'] as $key => $val) {
 $tmp2[$key] = $tmp[$val];
}

//overwrite with restore array
$array['two'] = $tmp2;

var_dump ( $array ):


array(2) {
 ["one"]=>
 array(4) {
 [0]=>
 string(1)"B"
 [1]=>
 string(1)"A"
 [2]=>
 string(1)"C"
 [3]=>
 string(1)"D"
 }
 ["two"]=>
 array(4) {
 [0]=>
 string(2)"BB"
 [1]=>
 string(2)"AA"
 [2]=>
 string(2)"CC"
 [3]=>
 string(2)"DD"
 }
}

0 0

imho,最好的做法是:


$tmp = array_combine($array['one'],$array['two']);
shuffle($tmp);
$array['one'] = array_keys($tmp);
$array['two'] = array_values($tmp);

这是清晰的代码,应该很快。 不需要像其他的答案那样重新发明轮子。

原作者:
0 0

这不是一个具有多维数组的例子,但是它可以用同样的方式对多个普通数组进行排序。 也许它也适用于多维数组。 它假定所有数组都是相同的长度。


$array_count = count($array_1);

for($i=0;$i<=($array_count-1);$i++){
 $temp_array[$i] = $i;
}

shuffle($temp_array);

for($i=0;$i<=($array_count-1);$i++){
 $o = $temp_array[$i];
 $array_1_sorted[$i]=$array_1[$o];
 $array_2_sorted[$i]=$array_2[$o];
 $array_3_sorted[$i]=$array_3[$o];
}

这将给你新的数组,这些数组都是按照相同的随机方式排序的。 然后,你可以将旧数组设置为新的数组,或者使它们保持一致。

0 0

不知道你想做什么,但是你最好的选择可能是把 array 1和 array 2成多维随机主 array array 然后。 这将给你一个随机的值排列,但是每个键中都将是每个 array的值。 如果你能提供更详细的细节,我们可以给你更具体的答案。

原作者:
...