Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Обновление массива в Foreach из-за array_push

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Webtest
Отправлено: 25 Августа, 2014 - 19:55:58
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




Здравствуйте.

Есть массив. В цикле foreach добавляются в этот массив элементы через array_push. Как сделать так, чтобы ЭТОТ ЖЕ foreach обрабатывал и добавленные элементы?

Вот код если интересно:
Спойлер (Отобразить)

(Добавление)
Ну, или как что-то подобное реализовать?
 
 Top
dmaw
Отправлено: 25 Августа, 2014 - 21:40:29
Post Id



Частый гость


Покинул форум
Сообщений всего: 227
Дата рег-ции: Сент. 2009  
Откуда: Беларусь, Витебск


Помог: 0 раз(а)




Может функцией сделать?
PHP:
скопировать код в буфер обмена
  1. function getPages($url)
  2. {
  3.    foreach()
  4.    {
  5.       // тут поиск урлов на странице и запись их в массив
  6.       getPages($newUrl): //каждый новый урл пропускаем опять через нашу функцию
  7.     }
  8. }
  9. getPages($_POST['siteName']);

(Отредактировано автором: 25 Августа, 2014 - 21:45:08)

 
 Top
Webtest
Отправлено: 26 Августа, 2014 - 10:26:31
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




dmaw, а где почитать как работать с функциями? Никогда раньше сними дело не имел, и даже такая конструкция не работает.
PHP:
скопировать код в буфер обмена
  1. $arr = array('1', '2', '3');
  2. function getPages($url) {
  3.         foreach ($arr as $value) {
  4.                 echo $value;
  5.                 // тут поиск урлов на странице и запись их в массив
  6.                 // getPages($newUrl): //каждый новый урл пропускаем опять через нашу функцию
  7.         }
  8. }
  9. getPages($_POST['siteName']);

Что-то я в функциях не понимаю.
 
 Top
OrmaJever Модератор
Отправлено: 26 Августа, 2014 - 10:56:55
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Webtest пишет:
Никогда раньше сними дело не имел

Вот с этого и нужно начинать, функции это самое элементарное что есть в любом ЯП, а вы даже не зная их уже лезете что-то писать. https://php.net/manual/ru/functi...user-defined.php
PS. ваш пример не работает потому что у функций есть область видимости. А ещё, то что показал dmaw называется - рекурсия. Гуглите, читайте, пробуйте.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Webtest
Отправлено: 26 Августа, 2014 - 11:02:08
Post Id


Посетитель


Покинул форум
Сообщений всего: 286
Дата рег-ции: Июнь 2014  


Помог: 0 раз(а)




OrmaJever, вроде немного разобрался.
Такой вопрос, если в функции есть ссылка на саму функцию, как например:
function getPages($url) {
getPages($newUrl);
}
Функция прерывается в это случае и начинает обрабатывать новый запрос или получается что функция обрабатывает внутри функции еще одну?
(Добавление)
Вот, сделал такую функцию:
Спойлер (Отобразить)


И код выводит как бы перекрестную ссылку, вот:

Спойлер (Отобразить)

И т.д. А не продолжает пробегаться по страничкам. Как это исправить?
(Добавление)
Т.е. код как бы забывает что он был на этой странице и идет назад, а как сделать так, чтобы, допустим, в массив добавлялись страницы, которые проверились, и на них больше не заходила функция?
Я вот попытался сделать внутри функции:
PHP:
скопировать код в буфер обмена
  1. $uniqUndoneArr = array_unique($undoneArr);
  2.  
  3. echo '<pre>';
  4. print_r($uniqUndoneArr);
  5. echo '</pre>';
  6.  
  7. print_r($doneUrl);
  8.  
  9. $diffArr = array_diff($uniqUndoneArr, $doneUrl);

Но он скачает только в 1 и 2 ссыле, как в примере выше.
 
 Top
Sail
Отправлено: 26 Августа, 2014 - 11:30:08
Post Id



Участник


Покинул форум
Сообщений всего: 1131
Дата рег-ции: Февр. 2014  


Помог: 57 раз(а)




Webtest, используйте в первом цикле (из первого сообщения) ссылочку:
PHP:
скопировать код в буфер обмена
  1. foreach ($pagesArrNew as &$value) {...

Либо вместо foreach():
PHP:
скопировать код в буфер обмена
  1. $value = reset($arr);
  2. while($value !== FALSE) {
  3. ...
  4. $value = next($arr);
  5. }
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB