![]() |
|
Модераторы: skyboy, MoLeX, Aliance, ksnk |
![]()
|
|
| motorway |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 578 Регистрация: 2.3.2008 Репутация: 1 Всего: 0 |
Что-то запутался вроде бы в простой вещи - добавление элементов в массив в процессе for each.
В общем, мне нужно сделать вот что. Есть код, который выполняется для элементов массива. Но при некоторых условиях нужно, чтобы в массив добавились еще элементы, и для них выполнился тот же код с начала цикла. Но сегодня ночью сидел, и что-то мне там не понравилось - при добавлении элемента в конец код продолжал исполняться сразу для нового элемента. А сейчас вот такой код пробую:
То есть, получается, я добавил в массив число 22, видно, что он добавился, но код для него не выполнился, так как 22 не вывело, а только 2 раза 11. По идее, я бы ожидал, что такой код два раза должен вывести 11 и два раза 22. Но сначала у меня было, что он выводил 11, а потом сразу 22, а здесь наоборот - только 11, а до 22 он даже не доходит. В чем тут дело? (ну и собственно, он должен на каждой итерации добавлять в конец число, раз стоит []) Это сообщение отредактировал(а) motorway - 15.9.2011, 15:21 -------------------- Russian Pascal Developer Network - Сеть разработчиков на языке программирования Pascal/Object Pascal Форум Delphi/Kylix, Free Pascal Compiler/Lazarus, PascalABC.NET Онлайн-кинотеатр |
|||
|
||||
| solenko |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1473 Регистрация: 15.1.2006 Где: Украина Репутация: 34 Всего: 67 |
Думаю, дело в том, что foreach делает копию массива и проходит по нему во избежание вечного цикла (как было-бы в случае с вашим кодом)
-------------------- Ла-ла-ла-ла Заметьте, нет официального подтверждения, что это не просто четыре слога. |
|||
|
||||
| motorway |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 578 Регистрация: 2.3.2008 Репутация: 1 Всего: 0 |
Ну а если мне как раз нужно продолжать добавлять в массив элементы - конец будет при наступлении некоторого условия? Не писать же еще один код для добавляемых элементов - нужно, чтобы тело цикла выполнялось для новых элементов так же
Добавлено через 52 секунды К тому же, вечные циклы вполне работают в других случаях (for и т.п.) Особых запретов на них нет... -------------------- Russian Pascal Developer Network - Сеть разработчиков на языке программирования Pascal/Object Pascal Форум Delphi/Kylix, Free Pascal Compiler/Lazarus, PascalABC.NET Онлайн-кинотеатр |
|||
|
||||
| motorway |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 578 Регистрация: 2.3.2008 Репутация: 1 Всего: 0 |
Ну так всё-таки есть способ добавить в цикле в конец массива элемент, чтобы по нему тоже прошёлся цикл?
-------------------- Russian Pascal Developer Network - Сеть разработчиков на языке программирования Pascal/Object Pascal Форум Delphi/Kylix, Free Pascal Compiler/Lazarus, PascalABC.NET Онлайн-кинотеатр |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: нет Всего: 19 |
motorway, почитай наконец документацию на foreach. Используй for.
-------------------- You're face to face With man who sold the world |
|||
|
||||
| motorway |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 578 Регистрация: 2.3.2008 Репутация: 1 Всего: 0 |
Да я почитал только что, только странно это - они обычно были взаимозаменяемы.
-------------------- Russian Pascal Developer Network - Сеть разработчиков на языке программирования Pascal/Object Pascal Форум Delphi/Kylix, Free Pascal Compiler/Lazarus, PascalABC.NET Онлайн-кинотеатр |
|||
|
||||
| motorway |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 578 Регистрация: 2.3.2008 Репутация: 1 Всего: 0 |
Тогда возьмем такой код:
В начале цикла count($ar)=1, поэтому цикл должен остановиться после первой итерации. Однако неведомым образом после добавления элемента он продолжается, т.е. условие как бы пересчитывается, хотя первое вычисление дало жестко 1, и нет оснований пересчитывать его снова. И только установка брейка избавляет от бесконечности цикла. -------------------- Russian Pascal Developer Network - Сеть разработчиков на языке программирования Pascal/Object Pascal Форум Delphi/Kylix, Free Pascal Compiler/Lazarus, PascalABC.NET Онлайн-кинотеатр |
|||
|
||||
| newbee |
|
|||
![]() Бревно ![]() ![]() Профиль Группа: Участник Сообщений: 703 Регистрация: 24.8.2011 Репутация: нет Всего: 19 |
По твоей логике, код
Наверное тебе стоить более внятно рассказать, что ты пытаешься сделать, потому что поведение foreach тебя не устраивает, портивоположное поведение for - тоже. Я тебя не понимать. -------------------- You're face to face With man who sold the world |
|||
|
||||
| motorway |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 578 Регистрация: 2.3.2008 Репутация: 1 Всего: 0 |
Видимо, переутомление дает о себе знать, ну и некоторые вопросы имеют свои особенности. Например, почему в PHP for each не позволил добавлять в конец элементы, а в for можно.
У меня есть массив урлов, я выполняю запросы к ним - и если на странице нет нужного результата, то добавляю в массив еще урл и т.д. Нужно, что для каждого добавленного урла выполнялся один и тот же код. Насчет i<count($ar) понял, в чем тут дело. Я переделал на for, второе условие вообще убрал, добавил в сам код условие на break. Вроде бы уже начинает получаться то, что нужно. -------------------- Russian Pascal Developer Network - Сеть разработчиков на языке программирования Pascal/Object Pascal Форум Delphi/Kylix, Free Pascal Compiler/Lazarus, PascalABC.NET Онлайн-кинотеатр |
|||
|
||||
| Photon |
|
|||
|
Злобный программер ![]() ![]() Профиль Группа: Участник Сообщений: 282 Регистрация: 27.2.2009 Где: Таганрог Репутация: 10 Всего: 12 |
А не проще через while цикл организовать? Вот примерно как-то так..
-------------------- With best regards.. |
|||
|
||||
![]()
|
| Правила форума "PHP" | |
|
|
Новичкам:
Важно:
Внимание:
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | PHP: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |