如何从索引范围随机化数组?

问题描述 投票:0回答:2

我目前正在分配房间,如何将仅从索引1到3的数组随机化?我的数组中有4个索引。

$arrayroom = array("1","2","3","4");
$check1 = "SELECT COUNT(*) AS Total FROM grade_7 WHERE Room_Number = '1' ";
    $ch= mysqli_query($conn,$check1);
    $d = mysqli_fetch_assoc($ch);
    if($d['Total'] < 40){
        $room = $arrayroom[0];
     }
     else{
        $room = array_rand($arrayroom);
     }
php arrays random
2个回答
1
投票
  • 您可以将数组分为两部分。
  • 随机播放第一部分,第二部分保持原样。
  • 合并两个部分以获得结果。

Snippet:

<?php

$input = array("Neo", "Morpheus", "Trinity", "Cypher", "Tank");

$randomize = array_slice($input,0,3);
$keep_safe = array_slice($input,3);
shuffle($randomize);
print_r(array_merge($randomize,$keep_safe));

Demo: https://3v4l.org/HVMc8


0
投票

您可以使用此简单功能检索所需的输出:

function arrayRangeRand(&$arr, $s, $e){
    $tmp = [];
    for($i=$s;$i<=$e;$i++){
        $tmp[] = $arr[$i];
    }
    shuffle($tmp);
    foreach($tmp as $ind=>$val){
        $arr[$s+$ind] = $val;
    }  
}

 arrayRangeRand($data, $firstInd, $lastInd0);

Demo

这里for循环收集值from-to,然后将它们洗牌,然后用引用的索引用新值替换旧值。 &更改了原始数据数组,因此,您无需返回任何内容。

© www.soinside.com 2019 - 2024. All rights reserved.