Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在知道原始索引的情况下在PHP中洗牌数组?_Php_Arrays_Shuffle - Fatal编程技术网

如何在知道原始索引的情况下在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

如何在仍然知道原始索引的情况下洗牌PHP数组

我有一个简单的PHP数组(例如
[“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"]
这就是你想要的吗

不过,这只是一种方法。杰拉德的建议可能更有效