Php 如何在数组中允许重复的mysql行id?

Php 如何在数组中允许重复的mysql行id?,php,mysql,arrays,Php,Mysql,Arrays,表t1中的我的数据如下(仅2条记录) 我的php代码是: $userinfo[0] = '9'; $ghunt = DB::fetch_all("SELECT shid FROM t1 WHERE lvlmin <= ".$userinfo[0]." AND lvlmax >= ".$userinfo[0]. "ORDER BY rand() LIMIT 5"); print_r($ghunt); shid可以是数组中的随机位置。我不编写PHP代码,但我可以简单

表t1中的我的数据如下(仅2条记录)

我的php代码是:

$userinfo[0] = '9';
$ghunt = DB::fetch_all("SELECT shid FROM t1 
     WHERE lvlmin <= ".$userinfo[0]." AND lvlmax >= ".$userinfo[0].
    "ORDER BY rand() LIMIT 5");
print_r($ghunt);

shid
可以是数组中的随机位置。

我不编写PHP代码,但我可以简单地描述一种实现目标的方法。大多数语言都有MOD操作符,通常是
%
——MOD的php手册页面是

它给出了除法运算的余数,所以10模3等于1,因为10除以3等于9余数1

MOD的一个有用特性是,它的循环周期总是在0到1之间,比你要修改的要少。如果将递增的数字修改为5,则结果在一个周期内始终为0,1,2,3,4,0,1,2,3,4。这意味着您可以有一个带有递增数字的for循环,mod乘以数组长度,结果将是一个整数,它肯定是一个数组索引。如果循环变量高于数组的末尾,mod运算符将使其再次环绕到数组的开头

MyArray[ 1746262848 mod MyArray.length ] 
当然不会崩溃,即使阵列只有2项

所以对于你的情况,只要有一个循环。。将以下伪代码转换为PHP

// run the loop 5 times
For I as integer = 0 to 4 do
  Print MyArray[ i mod MyArray.length ]
如果数组中有两个项,A和B,它将简单地打印

如果您有3个项目A B C,它将打印ABCAB


希望这些信息将有助于您在php中实现解决此问题和许多未来问题的解决方案。在使用数组时,Mod对于实现各种功能非常有用,我不编写PHP代码,但我可以简单地描述一种实现目标的方法。大多数语言都有MOD操作符,通常是
%
——MOD的php手册页面是

它给出了除法运算的余数,所以10模3等于1,因为10除以3等于9余数1

MOD的一个有用特性是,它的循环周期总是在0到1之间,比你要修改的要少。如果将递增的数字修改为5,则结果在一个周期内始终为0,1,2,3,4,0,1,2,3,4。这意味着您可以有一个带有递增数字的for循环,mod乘以数组长度,结果将是一个整数,它肯定是一个数组索引。如果循环变量高于数组的末尾,mod运算符将使其再次环绕到数组的开头

MyArray[ 1746262848 mod MyArray.length ] 
当然不会崩溃,即使阵列只有2项

所以对于你的情况,只要有一个循环。。将以下伪代码转换为PHP

// run the loop 5 times
For I as integer = 0 to 4 do
  Print MyArray[ i mod MyArray.length ]
如果数组中有两个项,A和B,它将简单地打印

如果您有3个项目A B C,它将打印ABCAB


希望这些信息将有助于您在php中实现解决此问题和许多未来问题的解决方案。在使用阵列时,Mod对于实现各种功能非常有用,为什么不这样做呢

If (count($ghunt) < 5){
    $realResultCount = count($ghunt);
    for ($i = realResultCount; $i <= 5; $i++){
        $ghunt[$i] = $ghunt[rand(0,realResultCount-1)];
    }
}
If(计数($ghunt)<5){
$realResultCount=计数($ghunt);

对于($i=realResultCount;$i为什么不这样做

If (count($ghunt) < 5){
    $realResultCount = count($ghunt);
    for ($i = realResultCount; $i <= 5; $i++){
        $ghunt[$i] = $ghunt[rand(0,realResultCount-1)];
    }
}
If(计数($ghunt)<5){
$realResultCount=计数($ghunt);

对于($i=realResultCount;$i读者注意:代码中添加了换行符,以使其适合问题显示的宽度。为什么您需要正好5个结果?您不能简单地循环它们,直到没有更多结果吗?我必须这样做,您能帮上忙吗?读者注意:代码中添加了换行符,以使其适合问题显示的宽度estion Display为什么你需要5个结果?你不能简单地循环它们直到没有结果了吗?我必须这样做,你能帮我吗?现在请自己试试,
$c=count($ghunt);if($c<5){$I=array_rand($ghunt,1);}$k=$ghunt[$I]['shid';
然后循环
$k[0]
也可以到达。谢谢。刚才我自己试试,
$c=count($ghunt);if($c<5){$i=array\u rand($ghunt,1);}$k=$ghunt[$i]['shid'];
并循环
$k[0]
也可以到达。谢谢。