Рекурсия PHP с результатами, помещенными в один массив

Я пытаюсь запрограммировать веб-искатель, но я понятия не имею, как создать рекурсию для синтаксического анализа веб-страницы и добавления всех итоговых результатов в конечный массив. Я никогда раньше не работал с php, но я много сделал в Интернете и понял, как разобрать страницу, которую я хочу очистить.
Обратите внимание, что я изменил значение $ url и результат массива ниже на некоторые значения, которые я случайно генерировал в своем уме.

<?php
include_once "simple_html_dom.php"; //http://simplehtmldom.sourceforge.net/

$url = "https://www.scrapesite.com/pagetoscrape/index.html";

function parseLink($link) {
    $html = file_get_html($link);
    $html = $html->find("/html/body/script[2]/text", 0);
    preg_match('/{(?:[^{}]|(?R))*}/', $html, $matches); //this regex extracts a json array
    $json = json_decode($matches[0]);
    $data = ($json->props->contents);
    return $data;
}
function getFolders($basepath, $data) {
    $data = $data->folders;
    $result = array();

    foreach ($data as $value) {
        $result[] = array("folder", $basepath . "/" . $value->filename, $value->href);
    }

    return $result;
}

$data = getFolders("", parseLink($url));
print_r ($data);

?>

Этот скрипт отлично работает и выводит следующее:

Array
(
    [0] => Array
        (
            [0] => folder
            [1] => /1
            [2] => https://www.scrapesite.com/pagetoscrape/sjdfi327943sad/index.html
        )

    [1] => Array
        (
            [0] => folder
            [1] => /2
            [2] => https://www.scrapesite.com/pagetoscrape/345fdsjjsdfsdf/index.html
        )

    [2] => Array
        (
            [0] => folder
            [1] => /3
            [2] => https://www.scrapesite.com/pagetoscrape/46589dsjodsiods/index.html
        )

    [3] => Array
        (
            [0] => folder
            [1] => /4
            [2] => https://www.scrapesite.com/pagetoscrape/345897dujfosfsd/index.html
        )

    [4] => Array
        (
            [0] => folder
            [1] => /5
            [2] => https://www.scrapesite.com/pagetoscrape/9dsfghshdfsds3/index.html
        )

)


Теперь скрипт должен выполнить функцию getFolders для каждого элемента в указанном выше массиве. Это может вернуть еще один массив из папки, который также должен быть проанализирован. И затем я хочу создать окончательный массив, в котором перечислены все папки АБСОЛЮТНЫЕ пути ($ basepath. "/.. $ Value-> filename) и ссылки href.

Я очень ценю каждый маленький намек. Мне удалось найти какой-то пример в Интернете, но я не могу понять, как его реализовать, потому что у меня почти нет опыта программирования на языках программирования вообще.

php,arrays,recursion,

-1

Ответов: 1


0 принят

Инициализируйте пустой массив и передайте это как ссылку на getFolders()функцию. Продолжайте помещать результаты скребков внутри этого массива. Кроме того, вам нужно getFolders()снова позвонить в foreachцикле getFolders(). Пример:

$finalResults = array();
getFolders("", parseLink($url), $finalResults);

getFolders()Теперь ваша подпись функции будет выглядеть следующим образом:

function getFolders($basepath, $data, &$finalResults) //notice the & before the $finalResults used for passing by reference

И ваш цикл foreach:

foreach ($data as $value) {
    $finalResults[] = array("folder", $basepath . "/" . $value->filename, $value->href);
    getFolders("", parseLink($value->href), $finalResults);
}

Выше код - всего лишь пример. Измените его в соответствии с вашими потребностями.

PHP, массивы, рекурсия,
Похожие вопросы