首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以同样的方式混洗2个php数组

问以同样的方式混洗2个php数组
EN

Stack Overflow用户
提问于 2011-02-06 13:26:36
回答 6查看 4.3K关注 0票数 8

我举了个例子:

代码语言:javascript
复制
$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;

我怎样才能把它们都打乱,以获得如下结果:

代码语言:javascript
复制
$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是一个随机密钥,但在两个数组上是相同的)。

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-02-07 00:08:59

像这样的东西可能行得通。它与Mimikry的答案类似,除了这个答案可以工作,即使您碰巧在数组一中有重复的值(这个不使用数组一的值作为临时数组的键)。

假设两个数组大小相同。

代码语言:javascript
复制
$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];
}
票数 3
EN

Stack Overflow用户

发布于 2012-01-31 05:35:19

代码语言:javascript
复制
$count = count($array['one']);
$order = range(1, $count);

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

  • 使用具有任何类型元素的数组(对象和数组也是如此)。
  • 这种方式可以用于任意数量的数组(而不仅仅是两个)。
  • 可以处理重复的值。
  • 干净代码。
票数 17
EN

Stack Overflow用户

发布于 2011-02-06 19:02:18

希望我的理解是正确的。

对于上面的示例,此代码应该可以工作。但它很难理解..。

代码语言:javascript
复制
$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):

代码语言:javascript
复制
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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4911770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档