如何在知道原始索引的情况下在PHP中洗牌数组?
如何在仍然知道原始索引的情况下洗牌PHP数组 我有一个简单的PHP数组(例如如何在知道原始索引的情况下在PHP中洗牌数组?,php,arrays,shuffle,Php,Arrays,Shuffle,如何在仍然知道原始索引的情况下洗牌PHP数组 我有一个简单的PHP数组(例如[“a”、“b”、“c”、[5,10]]) shuffle()函数允许您洗牌元素 然而,我仍然希望知道最初的索引是什么。我如何才能做到这一点?参见第二个示例: <?php function shuffle_assoc(&$array) { $keys = array_keys($array); shuffle($keys); foreach($ke
[“a”、“b”、“c”、[5,10]]
)
shuffle()
函数允许您洗牌元素
然而,我仍然希望知道最初的索引是什么。我如何才能做到这一点?参见第二个示例:
<?php
function shuffle_assoc(&$array) {
$keys = array_keys($array);
shuffle($keys);
foreach($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
return true;
}
参见第二个示例:
<?php
function shuffle_assoc(&$array) {
$keys = array_keys($array);
shuffle($keys);
foreach($keys as $key) {
$new[$key] = $array[$key];
}
$array = $new;
return true;
}
你的意思是将元素洗牌,并将它们与键一起保留,因此,如果你将它们按洗牌顺序放在foreach
上,它们会被洗牌吗?这可以通过将数组重塑为[键,值]
对的列表来实现:
$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);
结果可能是这样的(显然每次都是随机的):
最后,将其重新塑造为普通阵列:
$shuffled = array_combine(array_column($pairs, 0), array_column($pairs, 1));
最终结果如下所示:
[2 => "c", 1 => "b", 3 => [5, 10], 0 => "a"]
这就是你想要的吗
不过,这只是一种方法。杰拉德的建议可能更有效。你的意思是洗牌元素并保留它们的键,因此如果你对它们进行洗牌,它们会以洗牌的顺序出现?这可以通过将数组重新塑造成一个[键,值]
对的列表来实现:
$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);
结果可能是这样的(显然每次都是随机的):
最后,将其重新塑造为普通阵列:
$shuffled = array_combine(array_column($pairs, 0), array_column($pairs, 1));
最终结果如下所示:
[2 => "c", 1 => "b", 3 => [5, 10], 0 => "a"]
这就是你想要的吗
不过,这只是一种方法。杰拉德的建议可能更有效