2013-06-25 4 views
0

Я пытаюсь поставить весь набор результатов в массив следующим образом:Самый эффективный способ сбросить весь массив результатов mysql в массив?

while($myres[]=$result->fetch_array(MYSQLI_ASSOC)); 

Это работает нормально, но если у меня есть 5 строк возвращается в результаты массив имеет 6 индекс последнее существо нуль. Поэтому кажется, что мой массив всегда один слишком большой.

Я мог бы использовать num_rows, чтобы зацикливать результаты, но для этого требуется, чтобы я установил свой собственный счетчик и увеличил его, мне нравится эффективность сокращения моей строки выше, но как остановить ее заполнение последнего индекса нулевым набором.

Это альтернатива мне, использующая fetch_all, которую я обнаружил, для чего требуется специальный драйвер, который не все php-серверы установили.

ответ

1

Я просто хотел бы использовать несколько строк

$myres = array(); 
while ($row = $result->fetch_array(MYSQLI_ASSOC)) { 
    $myres[] = $row; 

Однако, если у вас есть иметь без дополнительной линии присваивания массива

while ($row = $result->fetch_array(MYSQLI_ASSOC) && $myres[] = $row) { 

но более или менее то же самое.

0

Выражение

while($myres[]=$result->fetch_array(MYSQLI_ASSOC)); 

выполняет следующие действия:

  1. выполнить $result->fetch_array(MYSQLI_ASSOC)
  2. присвоить результат этого выражения $myres[], тем самым добавляя запись в $myres массива
  3. Пропускают результат $result->fetch_array(MYSQLI_ASSOC) как условие для while и определить, следует ли выйти из цикла.

Обратите внимание, что добавление записи в $myres массива происходит до того определения, если петля while должна быть прервана. Это - то, откуда приходит ваш дополнительный ряд.

Вы не потеряете любой эффективности, делая его классический способом:

while ($record = $result->fetch_array(MYSQLI_ASSOC)) { 
$myres[] = $record; 
}