如何在仍然知道原始索引的情况下对 PHP 中的数组进行洗牌?
How to shuffle an array in PHP while still knowing the original index?
如何在仍然知道原始索引的情况下打乱 PHP 数组?
我在 PHP 中有一个简单的数组(例如 ["a", "b", "c", [5, 10]]
)。
shuffle()
函数允许您随机排列元素。
不过我还是想知道原来的索引是什么。我该怎么做?
见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;
}
你的意思是打乱元素并用它们的键保存它们,所以如果你 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"]]
最后,re-shape再次将其转化为普通数组:
$shuffled = array_combine(array_column($pairs, 0), array_column($pairs, 1));
最终结果看起来像这样:
[2 => "c", 1 => "b", 3 => [5, 10], 0 => "a"]
这是你想要的吗?
不过,这只是一种方法。杰拉德的建议可能更有效。
如何在仍然知道原始索引的情况下打乱 PHP 数组?
我在 PHP 中有一个简单的数组(例如 ["a", "b", "c", [5, 10]]
)。
shuffle()
函数允许您随机排列元素。
不过我还是想知道原来的索引是什么。我该怎么做?
见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;
}
你的意思是打乱元素并用它们的键保存它们,所以如果你 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"]]
最后,re-shape再次将其转化为普通数组:
$shuffled = array_combine(array_column($pairs, 0), array_column($pairs, 1));
最终结果看起来像这样:
[2 => "c", 1 => "b", 3 => [5, 10], 0 => "a"]
这是你想要的吗?
不过,这只是一种方法。杰拉德的建议可能更有效。