Поместите массив в массиве в то время как в цикле - PullRequest
0 голосов
/ 21 декабря 2018

Я работаю над простым приложением, которое сканирует массив веб-сайтов, и я пытаюсь сохранить URL-адреса в массиве, а затем поместить его в другой массив, моя проблема заключается только в результате первого домена в массиве.отображается (извините, мои наблюдения ошибочны ранее).

    <?php

        $arrDomains = array('http://example1.com/', 'http://example2.com/');

        $arrExternals = array();
        for($i = 0; $i < count($arrDomains); $i++){

            $domain = test_input($arrDomains[$i]);

            $domain = filter_var($domain, FILTER_SANITIZE_URL);

            // START HERE

            $html = file_get_contents($domain);

            $dom = new DOMDocument();
            @$dom->loadHTML($html);

            // grab all the on the page
            $xpath = new DOMXPath($dom);
            $hrefs = $xpath->evaluate("/html/body//a");

            $external = array();

            for ($i = 0; $i < $hrefs->length; $i++) {
                $href = $hrefs->item($i);
                $url = $href->getAttribute('href');

                if (filter_var($url, FILTER_VALIDATE_URL) !== false) {

                    if (strpos($url, 'mailto') === false) { // exclude emails

                        if (!in_array($url, $external)) {
                            array_push($external, $url);
                        }
                    }
                }
            }

            array_push($arrExternals, $external);

        }


?>

1 Ответ

0 голосов
/ 21 декабря 2018

Вам нужно изменить переменную $ i, потому что она переопределяет $ i в первом цикле for.Я изменил один $ я на $ j:

    $arrDomains = array('http://example1.com/', 'http://example2.com/');

    $arrExternals = array();
    for($i = 0; $i < count($arrDomains); $i++){

        $domain = test_input($arrDomains[$i]);

        $domain = filter_var($domain, FILTER_SANITIZE_URL);

        // START HERE

        $html = file_get_contents($domain);

        $dom = new DOMDocument();
        @$dom->loadHTML($html);

        // grab all the on the page
        $xpath = new DOMXPath($dom);
        $hrefs = $xpath->evaluate("/html/body//a");

        $external = array();

        for ($j = 0; $j < $hrefs->length; $j++) {
            $href = $hrefs->item($j);
            $url = $href->getAttribute('href');

            if (filter_var($url, FILTER_VALIDATE_URL) !== false) {

                if (strpos($url, 'mailto') === false) { // exclude emails

                    if (!in_array($url, $external)) {
                        array_push($external, $url);
                    }
                }
            }
        }

        array_push($arrExternals, $external);

    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...