Как сохранить результат выборки из базы данных в массив? + перебор массива

Иногда необходимо сохранить результаты выборки в массив, чтобы в будущем использовать их в скрипте (вывести где нужно и т.д.). Я расскажу, как это сделать.

Выборка из базы данных это практически самое частое, что требуется сделать. Но как сохранить результат выборки в массив, чтобы дальше использовать в скрипте? Я решил написать короткую инструкцию для вас, да и для себя, ведь в справочнике все это написано техническим языком и для новичка может быть непонятно.

Создаю базу и таблицу для примера

В прошлой статье я рассказывал про подключение к базе, там же создал базу dbname, которую потом переименовал в dbname2. Вот в ней я создам таблицу, к примеру, users (сотрудники), которая будет содержать id (номер) сотрудника, имя, фамилию и должность.
добавление таблицы сотрудников

Итак, придумаем себе сами задачу — вывести на страницу в виде таблицы имена, фамилии и должности всех сотрудников из базы, не выводя при этом id человека. Вот так будет стоять задача. Простая, но тем не менее позволит как раз сделать выборку, сохранить ее в массив и потом вывести.


Я добавил пару сотрудников в таблицу (3 человека, нам для примера хватит).

Делаем выборку

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

$query = mysqli_query($db, "SELECT name,surname,position FROM `users`");

Я конечно, не буду в этой статье вам объяснять, как работает запрос выборки в SQL, отмечу лишь что:

  1. Выбираем не все поля, а только нужные. в нашем случае нам нужны все, кроме id. Значит, после ключевого слова SELECT указываю все нужные поля.
  2. FROM users — разумеется, эта часть строки указывает, откуда, из какой таблицы нужно выбрать эти поля. У нас 1 таблица — users, ее и пишем.
  3. Результат выполнения запроса помещаем в переменную query, ведь он нам пригодится.

Сохраняем выборку в массив

Для этого нужно использовать функцию mysqli_fetch_all (проще говоря, она собирает все результаты выборки в массив). Сразу же поместим итоговый результат в переменную result (это и будет массив, в котором хранится выборка):

$result = mysqli_fetch_all($query, MYSQLI_NUM);

Второй параметр (MYSQLI_NUM) указывает на то, что массив будет с числовыми ключами. Именно такой нужен, чтобы его перебрать в цикле for.

Чтобы вывести массив на экран, используем функцию print_r:

print_r($result);


Выглядит конечно, не очень здорово, но если открыть исходный код документа Ctrl + U, то данные будут уже в читабельном виде.

Как видите, массив содержит в себе имена, фамилии и должности сотрудников и при этом не содержит ID, который нам, допустим, не нужен.

Как перебрать массив и вывести на страницу читабельные данные

Хорошо, в массиве уже содержатся все нужные данные. Допустим, нужно красиво вывести их на страницу, в виде таблицы. Начнем с вывода верхней части, которая статична:

echo '<table>
<tr>
<th>Имя</th>
<th>Фамилия</th>
<th>Должность</th>
</tr>';

Далее естественно, статическим образом ничего не выведешь. Поскольку у нас массив с выборкой — двумерный (то есть внутри него есть другие массивы), то для его перебора нужен цикл в цикле. Толково объяснять, как это работает, честно, не могу, а вот код предоставить могу:

for($i = 0; $i < mysqli_num_rows($query); $i++){
	echo '<tr>';
	for($j = 0; $j < mysqli_num_fields($query); $j++){
		echo '<td>';
		echo $result[$i][$j];
		echo '</td>';
	}
	echo '</tr>';
}
echo '</table>';

Вверху запускаем первый цикл, i = 0 и увеличивается при каждом выполнении на единицу, цикл выполняется до тех пор, пока i меньше количества строк, затронутых выборкой. Таких строк у нас 3, так как сотрудников 3. Поэтому $i < mysqli_num_rows($query) в моем случае эквивалентно записи $i < 3.

Верхний цикл выводит лишь теги tr, создающие табличный ряд.

Сам же вывод происходит во внутреннем цикле, где те же условия, но j уже меньше mysqli_num_fields($query) - эта функция возвращает кол-во полей, участвующих в выборке (а таких в нашем случае 3 - имя, фамилия и должность).

Внутри второго цикла уже все и выводится - сами ячейки таблицы и непосредственно данные. Вот такой результат (я также добавил отступы ячейкам, чтобы смотрелось лучше):

Самое главное, что этот код не нужно будет менять, если вы добавить в таблицу новых сотрудников. Они автоматически сами будут добавлены в таблицу. Удобно!

К примеру, сейчас я добавил в базу 2 новых сотрудников и тут же скрипт без моего участия показал обновленную таблицу:

Что ж, я надеюсь, эта статья была для вас полезной и помогла разобраться с вопросом сохранения выборки в массив и дальнейшему использованию этого массива в скрипте.

Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: