Как разрешить дублирование идентификатора строки mysql в массиве?

0

Мои данные в таблице 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 может быть случайным местом в массиве.

Теги:
arrays

2 ответа

1
Лучший ответ

Почему бы вам не сделать что-то подобное?

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

В основном, что делает код выше, если ghunt имеет менее 5 записей в нем, он достигает его до 5, путем случайного выбора записей из первоначально возвращенных записей.

  • 0
    сейчас попробуй сам, $c = count($ghunt); if($c < 5){ $i = array_rand($ghunt,1); } $k = $ghunt[$i]['shid']; и цикл $k[0] также может достигать. Спасибо.
1

Я не кодирую 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 для этого и многих будущих проблем. Мод может быть действительно полезен для реализации различных вещей при работе с массивами

Ещё вопросы

Сообщество Overcoder
Наверх
Меню