新数组随机加入2个数组

时间:2014-02-02 10:30:08

标签: php arrays sorting random

亲爱的stackoverflow成员, 我想随机加入2个数组,如下所述,我尝试了不同的方法,但我无法产生我想要的结果。

我有2个看起来像这样的数组。让我们称之为名称

Array
(
    [bill] => Array
        (
        )

    [steve] => Array
        (
        )

    [Ritchie] => Array
        (
        )

)

现在这些名称是从另一个函数生成的,它的输出看起来像这样。

Array
(
    [1] => Array
        (
            [email] => info@bill.com
            [name] => bill
            [web] => http://bill.com
        )

    [2] => Array
        (
            [email] => rich@steve.com
            [name] => steve
            [web] => http://steve.com
        )

    [3] => Array
        (
            [email] => god@linux.com
            [name] => Ritchie
            [web] => http://linux.com
        )

    [4] => Array
        (
            [email] => dummy@dummy.com
            [name] => Ritchie
            [web] => http://linux.com
        )

)

和第二个数组,我们称之为国家/地区

Array
(
    [0] => USA
    [1] => UK
    [2] => Netherlands
    [3] => Australia
    [4] => Germany
)

现在这是确切的问题。我想要连接第一个数组名称和第二个数组国家,并以随机顺序形成另一个关联数组。但请注意,返回名称数组的函数会返回键: Ritchie 两次,它有2次出现。所以最终的数组应该是这样的。

Array
(

    [Ritchie] => Array
        (
            [0] => USA,
            [1] => Germany
        )

    [bill] => Array
        (
            [0] => Netherlands
        )

    [steve] => Array
        (
            [0] => UK
        )

)

由于键 Ritchie 有2次出现,因此应添加 country 数组中的2个唯一值。 名称中的键或次数以及国家/地区中的键将始终相同。如果他们有什么不清楚的地方,请告诉我,我会清除它。


我对互联网和stackoverflow做了大量研究,我只能想出这个。我现在的解决方案就是这个。请善意帮助我改进当前的代码行以满足我的需要,或者可能不是很优雅,如果有的话,请善意提出更好的解决方案。

$jumble = array();
  foreach ($names as $name) {
  $jumble[$name] = $countries[array_rand($countries)];
}

谢谢。

1 个答案:

答案 0 :(得分:1)

试试这段代码:

shuffle($countries);
$n = count($countries); $i = 0;
$jumble = array();
foreach ($names as $name) {
    if (!isset($jumble[$name])) $jumble[$name] = array();
    $jumble[$name][] = $countries[$i++ % $n];
}

Demo

相关问题