Foreach rows as row

Если я выполню это, я получу первую строку arrayarrayarray (…), но вторая пуста. Есть ли способ выполнить это дважды?

РЕДАКТИРОВАТЬ: У меня была опечатка в этом посте, оригинальный вопрос стоит

Решение

$rows является подготовленным объектом заявления. Этот объект реализовать Traversable так что вы можете использовать foreach получать результаты, а не напрямую вызывать метод выборки. Но после того, как вы получили результаты один раз, вы не можете получить их снова. Вам нужно будет выполнить запрос снова или сохранить результаты в массиве во время первой итерации и использовать сохраненные результаты во второй раз, например так:

Кроме того, я не уверен, как echo($row) работает здесь, так как я бы предположил, $row будет массив, но это не относится к делу.

Другие решения

Я чувствую, что это проблема с печатанием и должна быть:

Существует несколько способов формирования результатов запроса:

Массив Результата

result()

Этот метод возвращает результат запроса в виде массива объектов или пустой массив при неудаче. Обычно вы будете использовать этот метод в цикле foreach, например:

Вышеописанный метод является псевдонимом result_object() .

Вы также можете передать строку в result() , который представляет собой класс создания экземпляра для каждого объекта результат (Примечание: этот класс должен быть загружен)

result_array()

Этот метод возвращает результат запроса в виде обычного массива или пустого массива если нет результатов. Обычно вы будете использовать этот метод в цикле foreach, например:

Строки Результата

row()

Этот метод возвращает одну строку результата. Если ваш запрос содержит более одной строки, метод вернет только первую строку. Результат возвращается в качестве объекта. Вот пример использования:

Если вам нужно получить определенную строку, вы можете указать номер строки числом в качестве первого параметра:

Вы также можете добавить вторым параметром строку, которая является именем класса для создания экземпляра строки:

row_array()

Идентичен методу row() выше, кроме того что он возвращает массив. Пример:

Если вам нужно получить определенную строку, вы можете указать номер строки числом в качестве первого параметра:

Кроме того, вы можете перемещаться вперед/назад/начало/конец в ваших результатах, используя эти вариации:

По умолчанию они возвращают объект, пока вы не поместите слово “array” в параметре:

Все эти методы будут загружать весь результат в память (предварительная выборка). Используйте unbuffered_row() для обработки больших наборов результатов.

unbuffered_row()

Этот метод возвращает одну строку результата без предзагрузки всего результат в память в отличии от row() . Если ваш запрос содержит более одной строки, он возвращает текущую строку и сдвигает внутренний указатель данных вперед.

При желании вы можете передать ‘object’ (по умолчание) или ‘array’ для того, чтобы задать тип возвращаемого значения:

Пользовательские Объекты Результата

Вы можете получить результаты запроса как экземпляр пользовательского класса вместо stdClass или массив как позволяют методы result() и result_array() . Требует, чтобы класс уже был загружен в память. Объект будет иметь все значения, возвращаемые из базы данных установленными как свойства. Если они были объявлены и непубличны, то вы должны предоставить __set() метод чтобы их можно было установить.

Помимо уже перечисленных методов, следующие методы также могут иметь имя класса, чтобы вернуть результаты: first_row() , last_row() , next_row() , and previous_row() .

custom_result_object()

Возвращает полный результирующий набор массива экземпляров указанного класса. Единственный параметр — имя класса для инициализации.

custom_row_object()

Возвращает одну строку из результатов запроса. Первый параметр — номер строки результата. Второй параметр — имя класса для инициализации.

Вы также можете использовать метод row() точно таким же образом.

Вспомогательные Методы Результатов Запроса

num_rows()

Количество строк, возвращаемых запросом. Примечание: В этом примере, $query — переменная, которой присваивается объект результата запроса:

Не все драйверы баз данных способны получить общее количество строк в результирующем наборе. В этом случае, все данные кешируются и могут быть подсчитаны вручную методом count() , чтобы достичь того же результата.

num_fields()

Количество ПОЛЕЙ (столбцов) возвращенных запросом. Убедитесь в том, что вызваемый метод, использует результат запроса объекта:

free_result()

Освобождает память связанную с результатом и удаляет ресурс результата ID. Обычно PHP автоматически освобождает память в конце выполнения скрипта. Однако, если вы используете много запросов в скрипте, где вы возможно захотите освободить память после каждого запроса, вам следует использовать этот метод для сокращения потребляемой памяти.

data_seek()

Этот метод устанавливает внутренний указатель на следующую строку, извлеченного результата. Это полезно только в сочетании с unbuffered_row() .

Он принимает положительное целочисленное значение, которое по умолчанию равно 0 и возвращает TRUE при успехе или FALSE в случае неудачи.

Не все драйвера баз данных поддерживают эту функцию и возвращают FALSE. Прежде всего вы не сможете использовать его с PDO.

Справка Класса

>CI_DB_result result( [ $type = ‘object’ ] )

Обертка для result_array() , result_object() и custom_result_object() методов.

result_array()

Параметры:
  • $type (строка) – Тип запрашиваемых результатов — массив, объект или имя класса
Возвращает:

Массив, содержащий выбранные строки

Возвращаемый тип:
Возвращает: Массив, содержащий выбранные строки
Возвращаемый тип: массив

Возвращает результаты запроса в виде массива строк, где каждая строка представляет собой ассоциативный массив.

result_object()

Возвращает: Массив, содержащий выбранные строки
Возвращаемый тип: массив

Возвращает результаты запроса в виде массива строк, где каждая строка представляет собой объект stdClass .

custom_result_object($class_name)

Параметры:
  • $class_name (строка) – Имя класса для строк результата
Возвращает:

Массив, содержащий выбранные строки

Возвращаемый тип:

Возвращает результат запроса в виде массива строк, где каждая строка является экземпляром указанного класса.

row( [ $n = 0 [ , $type = ‘object’ ] ] )

Параметры:
  • $n (число) – Индекс строки запроса которая должна быть возвращена
  • $type (строка) – Тип требуемого результата — массив, объект или имя класса
Возвращает:

Требуемую строку или NULL если таковой не существует

Возвращаемый тип:

Обертка для row_array() , row_object() и «custom_row_object() методов.

unbuffered_row( [ $type = ‘object’ ] )

Параметры:
  • $type (строка) – Тип требуемого результата — массив, объект или имя класса
Возвращает:

Следующую строку запроса или NULL если таковой не существует

Возвращаемый тип:

Выбирает следующую строку результата и возвращает ее в запрошенной форме.

row_array( [ $n = 0 ] )

Параметры:
  • $n (число) – Индекс строки запроса которая должна быть возвращена
Возвращает:

Требуемую строку или NULL если таковой не существует

Возвращаемый тип:

Возвращает запрошенный строку результата в виде ассоциативного массива.

row_object( [ $n = 0 ] )

Параметры:
  • $n (число) – Индекс строки запроса которая должна быть возвращена
Возвращает:

Требуемую строку или NULL если таковой не существует

Возвращаемый тип:

Возвращает запрошенную строку результата как объект типа stdClass .

custom_row_object($n, $type)

Параметры:
  • $n (число) – Индекс строки возвращаемых результатов
  • $class_name (строка) – Имя класса для результирующей строки
Возвращает:

Требуемую строку или NULL если таковой не существует

Возвращаемый тип:

Возвращает запрошенную строку результата как экземпляр запрашиваемого класса.

data_seek( [ $n = 0 ] )

Параметры:
  • $n (число) – Индекс строки следующей для получения результата
Возвращает:

TRUE при успехе, FALSE в случае неудачи

Возвращаемый тип:

Перемещает внутренний указатель в результатах запроса до нужнного смещения.

set_row($key [ , $value = NULL ] )

Параметры:
  • $key (смешанный) – Имя столбца или массив пары ключ/значение
  • $value (смешанный) – Значение, присваиваемое столбцу, $key как одно имя поля
Возвращаемый тип:

Присваивает значение определенному столбцу.

next_row( [ $type = ‘object’ ] )

Параметры:
  • $type (строка) – Тип требуемого результата — массив, объект или имя класса
Возвращает:

Следующую строку из результирующего набора, или NULL если он не существует

Возвращаемый тип:

Возвращает следующую строку из результирующего набора.

previous_row( [ $type = ‘object’ ] )

Параметры:
  • $type (строка) – Тип требуемого результата — массив, объект или имя класса
Возвращает:

Предыдущую строку из результирующего набора, или NULL если он не существует

Возвращаемый тип:

Возвращает предыдущую строку из результирующего набора.

first_row( [ $type = ‘object’ ] )

Параметры:
  • $type (строка) – Тип требуемого результата — массив, объект или имя класса
Возвращает:

Первую строку из результирующего набора, или NULL если он не существует

Возвращаемый тип:

Возвращает первую строку из результирующего набора.

last_row( [ $type = ‘object’ ] )

Параметры:
  • $type (строка) – Тип требуемого результата — массив, объект или имя класса
Возвращает:

Последнюю строку из результирующего набора, или NULL если он не существует

Возвращаемый тип:

Возвращает последнюю строку из результирующего набора.

num_rows()

Возвращает: Количество строк в результирующем наборе Возвращаемый тип: число

Возвращает количество строк в результирующем наборе.

num_fields()

Возвращает: Количество полей в результирующем наборе
Возвращаемый тип: число

Возвращает количество полей в результирующем наборе.

field_data()

Возвращает: Массив, содержащий поля мета-данных
Возвращаемый тип: массив

Создает массив stdClass объектов содержащий поля мета-данных.

free_result()

Возвращаемый тип: пустота

Освобождает результирующий набор.

list_fields()

Возвращает: Массив имен столбцов
Возвращаемый тип: массив

Возвращает массив, содержащий имена полей в результирующем наборе.

© Copyright 2014 — 2020, British Columbia Institute of Technology. Последнее обновление 22 Апреля 2018.

I have a pretty standard database like:

and I want to display it in a table, but every row in the DB needs to be a column in HTML table:

I get all the data in one long column. How do I break the column after every SQL row?

Note: $data is an array of objects that contain properties with the field values (you can probably figure that out from the example).

EDIT:

I found the solution, see my answer, it’s simple and elegant.

6 Answers 6

I figured it out, turns out it’s a pretty simple solution with few cycles and pre-populating an array before writing rows and cells.

I tested it, works like a charm. 😉 It might be useful for someone, so here it is:

Answer has been updated for adjusted original post requirements as follows:

this is a wierd (or elegant) way to get what you want done and it will likely take tweaking to get it to look pretty, but it seems to work as you can see at the following url

it has the php div method on top and does indeed show that the div’s are different sizes as you had hoped would not happen. I have however come up with elegant/ugly solution that works with a table.

i have to admit it is strange, but it keeps your tables with the correct heights .. the next more complicated part would be to set how many columns to show as this method makes it much more complicated to break after 5 columns like the div method I had earlier.


[an error occurred while processing the directive]
Карта сайта