Проблема с печатью массива заголовков и URL-адресов

Я не очень хорошо разбираюсь в PHP.

У меня есть папка с файлами .html, которые часто меняются, а затем я хочу выполнить поиск в папке, проанализировать теги <h1>, а затем распечатать/отобразить каждый тег <h1> и его URL-адрес.

Получить теги <h1> из файлов .html было достаточно просто с помощью Google, но я не могу распечатать список заголовков <h1> и соответствующих им URL-адресов.

Вот что у меня есть до сих пор:

        $url_list = glob('posts/*.html'); // Searches for all files and folders in above directory that end in .html.

        foreach ($url_list as $url) { // Creates an array of post URL's and title <h1> tags.
            $post = new DOMDocument(); // Creates string to load blog post.
            $post->loadHTMLFile($url); // Loads blog post into string $post from its URL.

            $h1_tags = $post->getElementsByTagName('h1'); // Finds all <h1> tags.
            $first_h1 = $h1_tags->item(0); // Gets value of first <h1> tag.
            $title = $first_h1->nodeValue; // Sets $title to value of first <h1> tag.

            if (!empty($title)) { // Will only run on files which have a date in their metadata.
                $post_list[$url] = $title;
                $post_list[$title] = $url;
            }
        }

        sort($post_list); // Sorts list of posts in alphabetical order.

        $num = 1;

        foreach ($post_list as $title) { //
            echo "<a href=\"{$url}\"><h2>".($num++).". {$title} = {$url}</h2></a>";
        }
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
36
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вы добавляете заголовки и URL-адреса в один и тот же список, но в обратном порядке. Если вы создаете свои данные как...

        if (!empty($title)) { // Will only run on files which have a date in their metadata.
            $post_list[$title] = $url;
        }

Так что это добавляет его только один раз, а затем выводит как...

    foreach ($post_list as $title => $url) { //
        echo "<a href=\"{$url}\"><h2>".($num++).". {$title} = {$url}</h2></a>";
    }

Обновлено: изменить sort() на asort()

Спасибо, это упорядочивает URL-адреса, но по какой-то причине заголовки, которые я хочу напечатать, отображаются просто как 0, 1, 2 ... и т. д., а не заголовки, которые я хотел из тегов <h1>. Что я еще делаю не так?

etsnyman 06.07.2019 17:33

Это, вероятно, просто вывод $num++. Возможно, вам придется проверить, что в цикле, где вы их устанавливаете, вы получаете значение для $title = $first_h1->nodeValue;. Если у вас есть образец HTML-страницы, которую я мог бы попробовать, я бы смог ее проверить.

Nigel Ren 06.07.2019 17:37

К сожалению, нет, я полностью удалил $num++, и это дает ту же проблему. Если я сделаю var_dump($post_list), это даст мне такой результат: array(5) { [0]=> string(17) "posts/bumble.html" [1]=> string(17) "posts/eighth.html" [2]=> string(16) "posts/fifth.html" [3]=> string(16) "posts/tenth.html" [4]=> string(16) "posts/third.html" }

etsnyman 06.07.2019 17:42

Ах, вам нужно использовать asort($post_list);, так как ключи удаляются sort().

Nigel Ren 06.07.2019 17:45

АГА! Спасибо, Найджел! Я никогда не знал, что sort() сделал это! Задача решена!

etsnyman 06.07.2019 17:47

Другие вопросы по теме