表t1
中的数据如下(仅2条记录),
+-----------+-----------------+----------+
| shid | lvlmin | lvlmax |
+-----------+-----------------+----------+
| 1 | 1 | 10 |
| 2 | 5 | 10 |
+----------------------------------------+
我的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);
结果有2个数组:
Array ( [0] => Array ( [shid] => 2 ) [1] => Array ( [shid] => 1 ) )
当数组结果小于mysql查询中的LIMIT 5
时,如何自动使用$ghunt
中的数组结果来填充数组?
我的意思是:
Array (
[0] => Array ( [shid] => 2 )
[1] => Array ( [shid] => 1 )
[2] => Array ( [shid] => 2 )
[3] => Array ( [shid] => 1 )
[4] => Array ( [shid] => 1 )
)
shid
可以是数组中的随机位置。
答案 0 :(得分:1)
我不编码PHP,但我可以描述一种简单实现目标的方法。大多数语言都有一个MOD运算符,通常是%
- mod的php手册页是here
它给出了除法运算的余数,因此10 mod 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 ]
如果阵列中有2个项目A和B,它只会打印ABABA
如果您有3个项目A B C,它将打印ABCAB
希望这些信息对您在PHP中实现解决方案以及未来的许多问题都有所帮助。在使用数组
时,Mod对于实现各种操作非常有用答案 1 :(得分:1)
你为什么不这样做?
If (count($ghunt) < 5){
$realResultCount = count($ghunt);
for ($i = realResultCount; $i <= 5; $i++){
$ghunt[$i] = $ghunt[rand(0,realResultCount-1)];
}
}
基本上,上面代码的作用是,如果ghunt中的记录少于5条,则通过从最初返回的记录中随机选择记录,它最多可以达到5条。