[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите правильно составить рекурсивную функцию
ArtKuz
Здравствуйте, уважаемые знатоки. Никак не получается корректно составить рекурсивную функцию, в чем проблема - не пойму.
Суть функции в том, что мы передаем в неё список URL'ов сайтов-исключений и URL, который получаем из объекта. Если URL, который получаем из объекта совпадает с URL'ом из списка сайтов-исключений - увеличиваем итератор, получаем следующий URL из объекта и снова сравниваем, до тех пор пока не сравним либо 9 URL'ов, либо не получим значение итератора когда соответствий нет.
Собственно сама функция:

/*
@param $exSiteArr (array) массив с URL'ами сайтов (пример: array("insufficientscotty.com", "www.avtosnab66.ru","dailydro‌​pcap.com"...))
@param $element (object) из этого объекта получаем URL сайта, который будем сравнивать со списком URL'ов из массива выше
@param $iterator (number) число, номер какой картинки нам нужно получить из $element (0-8)
return number возвращаем последнее значение итератора
*/

function checkUrl($exSiteArr, $element, $iterator = 0) {
if ($iterator > 8) { // в объекте храниться максимум 9 url'ов (0-8)
return 8;
} else {
$siteUrl = $element->getSiteUrl($element->getUrl($iterator)); // получаем URL из объекта ("insufficientscotty.com", "dailydropcap.com"...)
// echo $iterator; // 0, 1, 2, 3

foreach ($exSiteArr as $siteEx) { // перебор URL'ов из списка исключений
if ((mb_strripos($siteEx, $siteUrl) !== false)) { // если URL, который получаем из объекта совпадает с URL'ом из списка сайтов-исключений
$iterator++; // увеличиваем значение итератора
checkUrl($exSiteArr, $element, $iterator); // вызываем эту же функцию рекурсивно, но с увеличенным итератором
} else {
continue;
}
}
}

// echo $iterator; // 3, 2, 1
return $iterator; // должны вернуть максимальный итератор
}

Пример использования функции:

$sitesExceptionsGetCSV = array("insufficientscotty.com", "www.avtosnab66.ru", "dailydro‌​pcap.com");
$searchImg = new MyClass($productName);
// из $searchImg получаем такие URL'ы: "insufficientscotty.com", "dailydro‌​pcap.com", "dailydro‌​pcap.com", "b1.simple.ru"
// первые 3 URL попадают под условие проверки, поэтому должны получить в итоге 4ый URL ("b1.simple.ru")


$iter = checkUrl($sitesExceptionsGetCSV, $searchImg);
// по идеи мы должны получить $iter = 3, но получаем $iter = 1

В функции прописал пример изменений итератора для конкретного примера.
Помогите пожалуйста правильно составить рекурсивную функцию!
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.