Чет мозги уже не соображают. Есть вот такой код (упростил, чтобы легче понять): Код (Text): $arr = ['1','2','3']; while ($z1->next()) { foreach ($arr as $arrone) { $r[] = $arrone.'-'.$z1->id; } } Не знаю как правильно объяснить, но надеюсь будет понятно. делаю sql запрос ($z1) где по условию ищется id нужных мне записей пока есть записи (while ($z1->next())) то делаем foreach и тд собственно вопрос: может логичнее сначала foreach, а внутри while ? или вообще без разницы? не пойму правильно ли я сделал в смысле логики
сложно объяснить нужно добавить в таблицу categories записи с news_id и category_id для определенных записей в таблице news (ну например у который tstamp = time()) Код (Text): INSERT INTO categories (category_id, news_id) VALUES (".$arrone.", ".$z1->id.") да дело не в этом, я хочу знать, что будет логически правильным while () { foreach() {} } или foreach () { while () {} } --- Добавлено --- ну например 10 новостей по 2 категории в каждой мне нужно сделать 20 записей в таблицу categories где будет category_id | news_id 1 | 1 2 | 1 1 | 2 2 | 2 ... --- Добавлено --- то есть $arr это массив с id категорий $z1 тут выборка всех новостей по условию (SELECT id FROM news WHERE...) --- Добавлено --- блин, наверно нереально со стороны понять что тут к чему)) сорри....
Просто ответьте, пожалуйста, на этот вопрос: Как работает конструкция while () { foreach() {} } ? Сначала, в первом витке цикла while полностью выполняется цикл foreach ? как только полностью выполнится foreach пойдет второй виток цикла while ? и снова полностью выполнится foreach я правильно понимаю?
@mkramer, ok, спасибо, у меня просто мозги уже не соображают, нужно было чтоб кто-то подтвердил)) я так понимаю, если наоборот, то не прокатит? foreach () { while () {} } логика уже ломается?
Логика остается в добром здравии. Для каждого элемента массива, для которого выполняется перебор foreach() будет выполняться блок while() --- Добавлено --- Другой вопрос: "Что происходит с данными?"...
@Sail, всё понял, да, получится наоборот, мне нужно чтобы для каждого while выполнялся foreach, а не наоборот
если ты хочешь, чтобы сначала была единичка, потом все айдишники z1, а потом двоечка, и снова все айдишники z1 - то да если ты хочешь чтобы на каждый айдишник z1 шли все 1 и 2 и 3, то как у тебя.
Конечно снаружи должен быть while, потому что он выполнится один раз и всё, eof. А foreach можно сколько угодно раз гонять.
@igordata, вот даже сейчас на свежую голову мне кажется это одним и тем же... и так и так будет по 20 записей, разве нет? (2 категории 10 новостей) while () { foreach() {} } category_id | news_id 1 | 1 2 | 1 1 | 2 2 | 2 foreach () { while () {} } category_id | news_id 1 | 1 1 | 2 2 | 1 2 | 2 в итоге тоже самое?))) --- Добавлено --- @[vs], немного не пойму первый цикл foreach в нем выполняется полностью while, так? потом второй цикл foreach и снова полностью выполняется цикл while ?
А по моему все не логично. Запрос должен быть один а на счет while и foreach а почему for обделили? Или почему не 2 foreach?
ну можно посоветовать ТСу скопить всё в массив и всё =) решена задачка - выводи хоть вдоль, хоть поперёк