CodeInMyHeart
@CodeInMyHeart
SOS

Почему этот код работает?

Здраствуйте! Наткнулся в учебнике на кусок кода, который мне сломал мозг. Вобщем текст учебника такой:

Давайте достанем все работников из таблицы workers и запишем их в массив $data (пусть подключение к БД выполнено где-то выше, не будем его записывать для краткости):

<table>
	<tr>
		<th>id</th>
		<th>name</th>
		<th>age</th>
		<th>salary</th>
	</tr>
	<?php
		$query = "SELECT * FROM workers";
		$result = mysqli_query($link, $query) or die( mysqli_error($link) );
		for ($data = []; $row = mysqli_fetch_assoc($result); $data[] = $row);
		var_dump($data); 
	?>
</table>


Полученный нами массив будет выглядеть так:

[
	['id' => '1', 'name' => 'Коля', 'age' => '23', 'salary' => '400'],
	['id' => '2', 'name' => 'Вася', 'age' => '24', 'salary' => '500'],
	['id' => '3', 'name' => 'Петя', 'age' => '25', 'salary' => '600'],
]

А смутило меня то, что в цикле в одну переменную $data записывается каждый раз какое-то значение, которое по логике должно стирать 0 место и записываться туда. Но в итоге выдает массив. Вобщем, кому не трудно, расскажите почему так можно делать, и заранее спасибо)
  • Вопрос задан
  • 137 просмотров
Решения вопроса 3
FanatPHP
@FanatPHP
Чебуратор тега РНР
Я правильно понимаю, что из всего этого адского говнокода тебе непонятен только оператор добавления в массив []?

Учебник разорвать, сжечь и выкинуть на помойку.
На будущее, этот код пишется вот так
$data = mysqli_query($link, "SELECT * FROM workers")->fetch_all(MYSQLI_ASSOC);
var_dump($data);
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
$data[] = $row
создан новый элемент массива и записаны данные.
Если бы там было
$data[0] = $row
то перезаписывался бы первый элемент массива, как Вы говорите, но там не так. Все норм.
Ответ написан
Комментировать
Softer
@Softer
$data[] = "X" - добавить в конец массива указанную строку. Чтобы перетирало 0-й индекс нужно указывать $data[0].
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы