Мои данные в таблице t1
как 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 ) )
Как мне сделать, когда результат массива меньше, чем LIMIT 5
в запросе mysql, автоматически использовать результат массива в $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, обычно %
- справочная страница php для мод здесь
Это дает нам остальную часть операции деления, поэтому 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 элемента ABC, он будет печатать ABCAB
Надеюсь, эта информация будет полезна вам для реализации решения в php для этого и многих будущих проблем. Мод может быть действительно полезен для реализации различных вещей при работе с массивами
$c = count($ghunt); if($c < 5){ $i = array_rand($ghunt,1); } $k = $ghunt[$i]['shid'];
и цикл$k[0]
также может достигать. Спасибо.