我可以选择数组中的一些(不是全部)元素并在 PHP 中对其进行打乱吗?

发布于 2024-08-12 00:28:40 字数 144 浏览 5 评论 0原文

我可以在 PHP 中选择数组中的一些元素并对其进行打乱吗? 你知道,当你使用 时

shuffle(array) 

,它会打乱数组中的所有元素,但我只想打乱数组中的某些元素,同时保持其他元素不变,该怎么做?

Can I choose some elements in an array and shuffle it in PHP?
You know, when you use

shuffle(array) 

, It shuffles all elements in an array, but I just want to shuffle some elements in an array while keep other elements unchanged, how to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

蛮可爱 2024-08-19 00:28:40

考虑以下情况

function swap(&$a, &$b) { list($a, $b) = array($b, $a); }

$len = count($a);
for($i = 0; $i < $len; $i++) {
   $j = rand(1, $len) - 1;
   swap($a[$i], $a[$j]);
}

,这是对所有数组元素进行洗牌的标准循环。为了仅对某些(“可移动”)元素进行洗牌,让我们将它们的键放入一个数组中

$keys = array(1, 3, 5, 7, 9, 11, 13, 17);

,并将 $a 上的循环替换为 $keys 上的循环,

$len = count($keys);
for($i = 0; $i < $len; $i++) {
   $j = rand(1, $len) - 1;
   swap($a[$keys[$i]], $a[$keys[$j]]);
}

这会将元素移动到位置 1、3、5 等位置,并将其他元素留在原处

Consider the following

function swap(&$a, &$b) { list($a, $b) = array($b, $a); }

$len = count($a);
for($i = 0; $i < $len; $i++) {
   $j = rand(1, $len) - 1;
   swap($a[$i], $a[$j]);
}

this is the standard loop that shuffles all array elements. To shuffle only some ("movable") elements, let's put their keys into an array

$keys = array(1, 3, 5, 7, 9, 11, 13, 17);

and replace the loop over $a with the loop over $keys

$len = count($keys);
for($i = 0; $i < $len; $i++) {
   $j = rand(1, $len) - 1;
   swap($a[$keys[$i]], $a[$keys[$j]]);
}

this moves elements in positions 1, 3, 5 etc. and leaves other elements in place

梦行七里 2024-08-19 00:28:40

您可以使用 array_slice 复制要打乱的数组部分,打乱副本,然后使用 array_splice 将打乱后的数据复制回原始数组。

编辑:更一般地说,如果您知道要洗牌的项目的键,请将它们放入名为 $keys 的数组中。然后:

// Get out the items to shuffle.
$work = array();
foreach ($keys as $i => $key) {
    $work[$i] = $myarray[$key];
}

shuffle($work);  // shuffle them

// And put them back.
foreach ($keys as $i => $key) {
    $myarray[$key] = $work[$i];
}

(抱歉,如果这有一些错误;我的 PHP 生锈了,而且我不在可以测试它的计算机附近!)

非常类似的东西适用于多维数组。 $keys 的每个元素都可以是索引数组,您可以编写 $myarray[$key[0]] 而不是 $myarray[$key] [$key[1]]

You can use array_slice to copy the part of the array you want to shuffle, shuffle the copy, and then use array_splice to copy the shuffled data back into the original array.

EDIT: More generally, if you know the keys of the items you want to shuffle, put them in an array called $keys. Then:

// Get out the items to shuffle.
$work = array();
foreach ($keys as $i => $key) {
    $work[$i] = $myarray[$key];
}

shuffle($work);  // shuffle them

// And put them back.
foreach ($keys as $i => $key) {
    $myarray[$key] = $work[$i];
}

(Sorry if this has some mistakes; my PHP is rusty and I'm not near a computer where I can test it!)

Something very similar will work for a multidimensional array. Each element of $keys could be an array of indices, and instead of $myarray[$key] you would write $myarray[$key[0]][$key[1]].

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文