我的数据在表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
可以在数组中随机位置。
你为什么不这样做?
If (count($ghunt) < 5){
$realResultCount = count($ghunt);
for ($i = realResultCount; $i <= 5; $i++){
$ghunt[$i] = $ghunt[rand(0,realResultCount-1)];
}
}
基本上,上述代码的作用是,如果Ghunt的记录少于5个记录,则可以通过随机从最初返回的记录中随机选择记录来最高5个记录。
我不编码PHP,但是我可以描述一种可以简单地实现目标的方式。大多数语言都有一个mod运算符,通常%
- MOD的PHP手册页在这里
它为我们提供了分区操作的其余部分,因此10 mod 3是1,因为10除以3为9剩余1
当时,Mod的一个有用的属性是,它总是比您修改的速度少于0到1。如果将增量数量提高5,则结果将始终为0,1,2,3,4,0,1,2,3,4。这意味着您可以拥有一个带有一些增量数字的循环,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中有2个项目,它将仅打印Ababa
如果您有3个项目A B C,它将打印Abcab
希望此信息对您在PHP中实施解决方案以及许多未来的问题将有所帮助。mod在使用数组时实现各种事情真的很有用