如何在知道原始索引的同时改组PHP数组?
我在PHP中有一个简单的数组(例如["a", "b", "c", [5, 10]]
)。
shuffle()
功能允许您随机播放元素。
但是我仍然希望知道原始索引是什么。我怎么能这样做?
答案 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"]
这就是你想要的吗?
但这只是一种方法。杰拉德所建议的可能更有效率。