Конструкцию
foreach ($data as $k => $val)
я проговариваю себе в уме так:
"перебрать весь массив $data и вывести его ключи в $k, а их значения в $v".
Также мне понятно с for
. Но я не могу "проговорить сам для себя" конструкцию
while ($l = mysqli_fetch_assoc($r))
Это как я должен понимать:
"пока $l равна результату преобразования объекта $r в ассоциативный массив?"
Но это же бред. Независимо от результата преобразования $l
в данном условие будет равна этому результату.
Прошу объяснить это строку. Спасибо.
пока $l равна результату
Не равна результату, а присваивается результат. Если хотите, то можно сказать так: пока присвоенный результат не равен false
- продолжать выполнять цикл. Если на ассоциативном уровне, то можете представить операцию присваивания ассоциативного массива строк с тем, как вы черпаете кружкой ($l
) воду из ведра (mysqli_fetch_assoc
). Если в кружке после очередного зачерпывания (итерации) есть вода (true
), можно продолжать набирать, но когда вода в ведре закончится - в кружке будет пусто (false
) и столь интересное занятие нужно прекращать.
Просто не надо читать весь while целиком:
while ($l = mysqli_fetch_assoc($r))
Вместо этого читайте его только для результата присвоения:
while ($l
А именно - "пока $l
есть true
или приводится к true
, выполнять..."
Аналогичная проблема у вас могла возникнуть и с чтением условий. Например, популярный способ проверки наличия кэша и его создания в случае отсутствия:
if (!($data = cache::get($key))) {
$data = Src::get();
cache::set($key, $data);
}
Интерпретатор первым делом выполнит cache::get($key)
, только потом присвоит результат в переменную $data = ..
и только потом приведёт значение переменной к boolean
(для этого и нужны скобки вокруг присвоения) !($data ..
.
Просто следуйте тем же путём, что и пыха. В условии и в цикле проверяется нечто в круглых скобках. В вашем случае это присвоение. И тут важно обратиться к документации:
здесь присутствует и еще одно значение - значение самого присвоения. Само присвоение вычисляется в присвоенное значение
(C) Выражения
Т.е. символ присвоения - =
- есть выражение и его результат - то, что справа от =
. Но удобнее смотреть на левую часть, а там у вас переменная. Результат присвоения в ней и рассуждать можно уже представляя что вы видите только эту переменную и ничего справа от неё.
Отдельно можете ещё попробовать переписать цикл на do..while
. Станет сложнее читать сам код, но будет понятнее как производится присвоение и проверка выхода из цикла.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Создал модуль и для него отдельный AppAsset, подключил стили и скрипты, но стили и скрипты не загружаются хотя если посмотреть исходный код страницы...
Столкнулась с проблемой: есть товары с одинаковым значением произвольного поляНужно вывести на странице товара, товары с таким же произвольным...
Получаю сообщению по вебсокету, здесь по одному их обрабатываюПочему если убрать первый var_dump, то второй ничего не выведет, а с первым var_dump...