以相同的方式洗牌2个php阵列

pho*_*llz 8 php arrays random shuffle

我有这个例子:

$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;
Run Code Online (Sandbox Code Playgroud)

我怎样才能将它们混合起来以获得类似的东西:

$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;
Run Code Online (Sandbox Code Playgroud)

或者任何其他随机顺序,但两者中都有相同的"随机因素"?

例如,我想要那个$array['one'][0]并且$array['two'][0]得到洗牌以获得$array['one'][x]$array['two'][x](x作为随机密钥,但两个阵列上的SAME).

小智 17

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

shuffle($order);
array_multisort($order, $array['one'], $array['two']);
Run Code Online (Sandbox Code Playgroud)
  • 适用于具有任何类型元素的数组(对象和数组).
  • 这种方式可以与任意数量的数组(不仅仅是两个)一起使用.
  • 使用重复的值.
  • 清洁代码.

  • 这应该是我眼中接受的答案,+ 1! (3认同)

poi*_*son 4

像这样的东西可以工作。它与 Mimikry 的答案类似,只是即使数组一中碰巧有重复的值,这个答案也会起作用(这个答案不使用数组一的值作为临时数组的键)。

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

$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];
}
Run Code Online (Sandbox Code Playgroud)