Цикл в цикле

EkleP

Писатель
Регистрация
10 Фев 2012
Сообщения
0
Реакции
0
Задача состоит в том, что бы пропарсить все страницы в каждой из известных категорий.
Имеем массив категорий:
PHP:
$cat = array('cat_1', 'cat_2', 'cat_3', 'cat_4', 'cat_5');
Ссылки для любой из категорий имеют следующий вид:
PHP:
http://www.example.com/index.php?cat=cat_1&page=1
Последней страницы не существует! То есть начинает выводить: "Ничего не найдено!".
Вот, что написал я:
PHP:
$cat = array('cat_1', 'cat_2', 'cat_3', 'cat_4', 'cat_5');
foreach ($cat as $_cat) {
  for ($page = 0; $resp = 1; ++$page) {
      $content = file_get_contents('http://www.example.com/index.php?cat='.$_cat.'&page='.$page);
      if (preg_match('#Ничего не найдено!#', $content)) {
        $resp = 1;
      }
      else {
        // Парсим страницу
      }
  }
}
Но всегда парсит только одну категория, то есть выводит 5 массивов с одними и теми же данными.
Буду благодарен за любую помощь, спасибо!
 
ну для начала тут ошибка у тебя
PHP:
$cat = array('cat_1', 'cat_2', cat_'3', 'cat_4', 'cat_5');
а надо
PHP:
$cat = array('cat_1', 'cat_2', 'cat_3', 'cat_4', 'cat_5');
 
Здесь все написано упрощенно. Массив для примера.
 
ну ХЗ что ты там упростил :) но твой упрощенный если говорить именно о циклах в таком виде
PHP:
<?php
$cat = array('cat_1', 'cat_2', 'cat_3', 'cat_4', 'cat_5');
foreach ($cat as $_cat) {
  for ($page = 0; $page<5; $page++) {
    /* $content = file_get_contents('http://www.example.com/index.php?cat='.$_cat.'&page='.$page);
      if (preg_match('#Ничего не найдено!#', $content)) {
        $resp = 1;
      }
      else {
        // Парсим страницу
      }*/echo 'парсим страницы<br>';
  }
  echo 'парсим категорию'.$_cat.'<br>';
}
 
?>
выдает
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим категориюcat_1
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим категориюcat_2
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим категориюcat_3
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим категориюcat_4
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим страницы
парсим категориюcat_5
выкладывай не упрощенный :)
 
Все верно. Проходим категории. Но там где "парсим страницы" он парсит значения первой категории.
То есть:
Категория 1
Страница 1, категория 1
Страница 2, категория 1
Категория 2
Страница 1, категория 1
Страница 2, категория 1
и т.д.
 
Все верно. Проходим категории. Но там где "парсим страницы" он парсит значения первой категории.
То есть:
Категория 1
Страница 1, категория 1
Страница 2, категория 1
Категория 2
Страница 1, категория 1
Страница 2, категория 1
и т.д.
почему-то в моем примере :D получается так
парсим категорию cat_1
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим категорию cat_2
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим категорию cat_3
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим категорию cat_4
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим категорию cat_5
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
парсим страницы Для просмотра ссылки Войди или Зарегистрируйся
PHP:
<?php
$cat = array('cat_1', 'cat_2', 'cat_3', 'cat_4', 'cat_5');
foreach ($cat as $_cat) {
    echo 'парсим категорию '.$_cat.'<br>';
  for ($page = 0; $page<5; $page++) {
    /* $content = file_get_contents('http://www.example.com/index.php?cat='.$_cat.'&page='.$page);
      if (preg_match('#Ничего не найдено!#', $content)) {
        $resp = 1;
      }
      else {
        // Парсим страницу
      }*/echo 'парсим страницы http://www.example.com/index.php?cat='.$_cat.'&page='.$page.'<br>';
  }
 
}
 
?>
а вообще этот $resp = 1; после выхода из цикла страниц хотябы в ноль надо перевести
 
Понимаешь вся загвоздка в том, что ты указал значение последней страницы $page<5, у меня он должен прекратить свою работу когда $resp = 1; то есть когда на странице будет найдено
PHP:
preg_match('#Ничего не найдено!#', $content)
 
дак он у тебя всегда равен единице после уже первой категории
 
Вот решение)
PHP:
foreach(/* ... */)
{
    $i = 0;
    while(true)
    {
        $c = file_get_contents(/* ... */);
        if( preg_match(/* ... */) )
        {
          break;
        }
        
        // parse page
        
        $i++;
    }
}
Всем спасибо!) Тема закрыта.
 
Назад
Сверху