如何在仍然知道原始索引的同时在PHP中对数组进行洗牌?

时间:2016-01-17 18:59:15

标签: php arrays shuffle

如何在知道原始索引的同时改组PHP数组?

我在PHP中有一个简单的数组(例如["a", "b", "c", [5, 10]])。

shuffle()功能允许您随机播放元素。

但是我仍然希望知道原始索引是什么。我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

参见shuffle doc第二个例子:

<?php
    function shuffle_assoc(&$array) {
        $keys = array_keys($array);

        shuffle($keys);

        foreach($keys as $key) {
            $new[$key] = $array[$key];
        }

        $array = $new;

        return true;
    }

答案 1 :(得分:1)

你的意思是洗牌元素并用钥匙保留它们,所以如果你foreach超过它们,它们会以洗牌的顺序出现吗?通过将数组重新整形为[key, value]对列表,可以实现这一点:

$pairs = array_map(null, array_keys($array), array_values($array));

因此["a", "b", "c", [5, 10]]变为[[0, "a"], [1, "b"], [2, "c"], [3, [5, 10]]

然后,洗牌对:

shuffle($pairs);

这可能会结束这样的事情(显然每次都是随机的):

[[2, "c"], [1, "b"], [3, [5, 10]], [0, "a"]]

最后,再次将其重新塑造成一个正常的数组:

$shuffled = array_combine(array_column($pairs, 0), array_column($pairs, 1));

最终结果如下所示:

[2 => "c", 1 => "b", 3 => [5, 10], 0 => "a"]

这就是你想要的吗?

但这只是一种方法。杰拉德所建议的可能更有效率。