【问题标题】:Shuffling associate arrays - shuffle doesn't appear to be working洗牌关联数组 - 洗牌似乎不起作用
【发布时间】:2014-05-27 08:55:29
【问题描述】:

我正在尝试打乱关联数组的外部数组(内部数组应该保持相同的键/值关联),但它似乎没有打乱。

例子:

$moo = array (
    0 => array (
        0 => 'val0',
        1 => 'val1',
        2 => 'val2',
        3 => 'val3'
    ),
    1 => array (
        0 => 'val0',
        1 => 'val1',
        2 => 'val2',
        3 => 'val3'
    ),
    2 => array (
        0 => 'val0',
        1 => 'val1',
        2 => 'val2',
        3 => 'val3'
    ),
    3 => array (
        0 => 'val0',
        1 => 'val1',
        2 => 'val2',
        3 => 'val3'
    ),
    4 => array (
        0 => 'val0',
        1 => 'val1',
        2 => 'val2',
        3 => 'val3'
    )
);

shuffle($moo);

print_r($moo);

当它被输出时,它总是一样的。

【问题讨论】:

  • 注意:此函数将新键分配给数组中的元素。它将删除可能已分配的任何现有键,而不仅仅是重新排序键。 - 我不确定您的期望,但由于您的所有内部数组都是相同的,因此结果将显示不变...
  • 自己写一些东西,例如使用 array_rand。此处的示例函数:webstutorial.com/php-multidimensional-array-shuffle/programming/…。不是一个很好的,但它让你开始:)
  • @deceze 对不起,我误解了——我以为它会把钥匙 2 放在第一位;但我知道它现在是如何工作的。

标签: php arrays associative-array shuffle


【解决方案1】:

你在右边..请更改数组值并尝试,然后你会发现不同..

$moo = array (
    0 => array (
        0 => 'val0',
        1 => 'val1',
        2 => 'val2',
        3 => 'val3'
    ),
    1 => array (
        0 => 'cal0',
        1 => 'cal1',
        2 => 'cal2',
        3 => 'cal3'
    ),
    2 => array (
        0 => 'ral0',
        1 => 'ral1',
        2 => 'ral2',
        3 => 'ral3'
    ),
    3 => array (
        0 => 'yal0',
        1 => 'yal1',
        2 => 'yal2',
        3 => 'yal3'
    ),
    4 => array (
        0 => 'kal0',
        1 => 'kal1',
        2 => 'kal2',
        3 => 'kal3'
    )
);

shuffle($moo);
echo "<pre>";
print_r($moo);

【讨论】:

    【解决方案2】:

    由于所有 4 个内部数组都是相同的,你如何识别它们是否被洗牌?即改组 (1,1,1,1) 没有同样的意义。

    【讨论】:

    • 这不是答案
    • @KevinOpdenKamp:为什么?这是一个很好的,完整的答案。这不是用勺子喂食,而是说明了整个问题——数组被打乱了,但很难说清楚,因为它们都是一样的。该问题的作者似乎认为PHP中有两种数组(“关联”和“普通”),他对此是错误的。但是你不能在你写的每一个答案中都教给每个人关于 PHP 的一切。
    • 我非常怀疑。 OP 正在尝试对 ASSOCIATIVE 数组进行洗牌,而使用 shuffle 并首先保留所有原始键是不可能的。 php.net:此函数为数组中的元素分配新键。它将删除可能已分配的任何现有密钥,而不仅仅是重新排序密钥。他只是在使用一些示例数据,当然他知道如果它们都相同,那么对值进行洗牌是没有意义的……至少我希望如此!
    • 是的,我们只能猜测 OP 打算做什么。至于他发布的内容,我认为最好的答案是用最简单的方式说出来,如果还不够,让 op 提供更多关于他打算做什么的信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-04-15
    • 2013-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-06-14
    • 1970-01-01
    相关资源
    最近更新 更多