我有这个例子:
$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 :(得分:17)
$count = count($array['one']);
$order = range(1, $count);
shuffle($order);
array_multisort($order, $array['one'], $array['two']);
答案 1 :(得分:3)
这样的事情可行。它类似于Mimikry的答案,除非你碰巧在数组1中有重复的值(这个不使用数组1的值作为临时数组的键),所以它会起作用。
假设两个阵列的大小相同。
$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];
}
答案 2 :(得分:0)
对于上面的示例,此代码应该有效。但它非常hacky ......
$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(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"
}
}
答案 3 :(得分:0)
最佳实践,imho,如下:
$tmp = array_combine($array['one'],$array['two']);
shuffle($tmp);
$array['one'] = array_keys($tmp);
$array['two'] = array_values($tmp);
这是明确的代码,应该很快。不需要像其他答案一样重新发明轮子。
答案 4 :(得分:0)
这不是多维数组的示例,但它适用于以相同方式和shuffle排序多个普通数组。也许它也适用于多维数组。它确实假设所有数组都是相同的长度。
$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];
}
这将为您提供新的数组,这些数组都以相同的随机方式排序。然后,您可以将旧数组设置为等于新数组,或保持它们不变。
答案 5 :(得分:-1)
不确定您要做什么,但最好的办法是将数组1和数组2放入多维数组中,然后随机输入主数组。这将为您提供随机排列的值,但在每个键中将是每个数组的值。如果您能提供更准确的信息,我们可以为您提供更具体的答案。