Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Рекурсия функции, Проблемка возникла... 
:(
    Опции темы
Stear
Дата 28.7.2007, 10:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Проблема такая. Я написал функцию которая возвращает  массив элементов. Как сделать чтобы из массива поочередно выбирались элементы и вызывалась таже самая функция, используя выбранный элемент в качестве параметра?  При этом массив должен дозаписываться... То есть получается что число элементов постоянно будет увеличиваться...
PM MAIL   Вверх
teroni
Дата 28.7.2007, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 15.5.2007
Где: Днепропетровск

Репутация: 1
Всего: 22



Я бы делал примерно так:
Код

function somefunction($param, $count)
{
   global $array;
   //тело функции, что-то происходит, добавляются новые значения в $array;
   $count++;
   if (!isset($array[$count]))
      return $array;
   else
      somefunction($array[$count-1], $count);
}
$array = array();
$values = somefunction($firstparam, 0);

Может кривовато, не проверял... Но идея примерно такая.

Это сообщение отредактировал(а) teroni - 28.7.2007, 11:31
PM MAIL   Вверх
Golda
Дата 28.7.2007, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 3
Всего: 42



ну, зачем же global, тогда уже хотя бы static. 

А вообще, Stear,  можно чуть подробнее о задаче? Хотя бы, есть ли у Вас условия выхода из цикла? А то, судя повашей формулировке, планируется бесконечный цикл



--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
Stear
Дата 28.7.2007, 16:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.7.2007

Репутация: нет
Всего: нет



Вобщем то задача следующая: выбрать все ссылки с сайта которые не ведут на чужой. Так вот я написал функцию которая выдирает все ссылки которые не ведут на чужой сайт+все ссылки в этом массиве уникальны и  приведены к одному виду(http://site.ru/итд). Так вот мне нужны чтобы или цикл или рекурсия пробегала по всем ссылкам собирая ссылки на других страницах которые она уже прошла.

Добавлено через 6 минут и 19 секунд
Ну и цикл как видете не должен быть бесконечный. Потому что уникальные ссылки рано или поздно кончаться и цикл дойдет до конца. Или я ошибаюсь?
И еще такой вопросик... Получиться что этот скрипт будет очень долго выполняться. Как сделать что бы пользователя перекинуло на другую страницу. А скрипт продолжал выполняться?
PM MAIL   Вверх
Golda
Дата 28.7.2007, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 26.3.2007
Где: Ариель, Израиль

Репутация: 3
Всего: 42



Вам нужно что-то типа

Код

function get_links($pagetext) {
   $result = array();
   // Ваш код по выпаршиванию ссылок
   foreach ($links as $link) {
       $text = get_page_text($link);
       if (($newlinks = get_links($text)) === false) return false;
       $result = array_merge($result, $newlinks);
   }
    return $result;
}


В общем, рекурсия + array_merge()

Поскольку скрипт будет выполняться довольно долго, во-первых, не забудьте увеличить время выполнения скрипта

Код

set_time_limit(0);


0 - для неограниченного времени, можете поставить большое конечное число. 
Для удобства пользователя можно вывести ему сначала какое-то сообщение типа "Скрипт выполняется. Ждите ответа..." и использовать flush(), чтобы оно действительно попадало к пользователю сразу, а затем уже искать ссылки и показывать их.

Если есть вероятность, что смотреть ссылки будут гораздо чаще, чем они будут меняться, я бы разбила скрипт на 2: один собирает ссылки в базу данных и вызывается время от времени, например, cron-ом. А другой выбирает готовые ссылки из базы и показывает пользователю.


--------------------
"For every problem, there exists a simple and elegant solution which is absolutely wrong." -- J. Wagoner, U.C.B. Mathematics
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса

Внимание: данный раздел предназначен для решения сложных, нестандартных задач.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Для профи | Следующая тема »


 




[ Время генерации скрипта: 0.0425 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.