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
Форумы портала PHP.SU :: Версия для печати :: Обновление массива в Foreach из-за array_push
Форумы портала PHP.SU » » Вопросы новичков » Обновление массива в Foreach из-за array_push

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

1. Webtest - 25 Августа, 2014 - 19:55:58 - перейти к сообщению
Здравствуйте.

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

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

(Добавление)
Ну, или как что-то подобное реализовать?
2. dmaw - 25 Августа, 2014 - 21:40:29 - перейти к сообщению
Может функцией сделать?
PHP:
скопировать код в буфер обмена
  1. function getPages($url)
  2. {
  3.    foreach()
  4.    {
  5.       // тут поиск урлов на странице и запись их в массив
  6.       getPages($newUrl): //каждый новый урл пропускаем опять через нашу функцию
  7.     }
  8. }
  9. getPages($_POST['siteName']);
3. Webtest - 26 Августа, 2014 - 10:26:31 - перейти к сообщению
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']);

Что-то я в функциях не понимаю.
4. OrmaJever - 26 Августа, 2014 - 10:56:55 - перейти к сообщению
Webtest пишет:
Никогда раньше сними дело не имел

Вот с этого и нужно начинать, функции это самое элементарное что есть в любом ЯП, а вы даже не зная их уже лезете что-то писать. https://php.net/manual/ru/functi...user-defined.php
PS. ваш пример не работает потому что у функций есть область видимости. А ещё, то что показал dmaw называется - рекурсия. Гуглите, читайте, пробуйте.
5. Webtest - 26 Августа, 2014 - 11:02:08 - перейти к сообщению
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 ссыле, как в примере выше.
6. Sail - 26 Августа, 2014 - 11:30:08 - перейти к сообщению
Webtest, используйте в первом цикле (из первого сообщения) ссылочку:
PHP:
скопировать код в буфер обмена
  1. foreach ($pagesArrNew as &$value) {...

Либо вместо foreach():
PHP:
скопировать код в буфер обмена
  1. $value = reset($arr);
  2. while($value !== FALSE) {
  3. ...
  4. $value = next($arr);
  5. }

 

Powered by ExBB FM 1.0 RC1