A
A
ArtKuz2014-07-11 07:45:47
PHP
ArtKuz, 2014-07-11 07:45:47

How to correctly write a recursive PHP function for comparing website URLs?

Hello!
I can't figure out how to correctly compose a recursive function, what's the problem - I don't understand.
The essence of the function is that we pass into it a list of exception site URLs and the URL that we get from the object. If the URL that we get from the object matches the URL from the list of exclusion sites - we increase the iterator, get the next URL from the object and compare again, until either we compare either 9 URLs, or we get the value of the iterator when there are no matches .
The actual function itself:

/*
@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; // должны вернуть максимальный итератор
}

An example of using the function:
$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

I wrote an example of iterator changes for a specific example in the function.
Please help me write a recursive function!

Answer the question

In order to leave comments, you need to log in

3 answer(s)
D
Dmitry Entelis, 2014-07-11
@ArtKuz

It is not necessary to do such things with recursive functions.
What do you need to do? How many elements of the second array are in the first?
PS
Guys, what kind of recursion are you talking about if the return of the checkUrl function in the checkUrl itself is not used? :)
array_diff is what you need.
php.net/manual/en/function.array-diff.php

A
ArtKuz, 2014-07-11
@ArtKuz

Can you comment on why and how then it would be correct to do this?
No, I need to end up with a URL from an object that is not in the exclusion list.
This code is taken out of context and slightly simplified.
I am iterating over a lot of products, by name, using $searchImg = new MyClass($productName);I'm looking for image URLs. It is necessary to receive only those URLs that are not in the exclusion list.

M
Mikhail Bazhenov, 2014-07-11
@benign

Everything seems to be correct, here I made a couple of changes

/*
@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'ом из списка сайтов-исключений
            return checkUrl($exSiteArr, $element, $iterator++); // вызываем эту же функцию рекурсивно, но с увеличенным итератором
        } else {
            continue;
        }
    }
}
}

Didn't find what you were looking for?

Ask your question

Ask a Question

731 491 924 answers to any question