Я не очень хорошо разбираюсь в 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>";
}






Вы добавляете заголовки и 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()
Это, вероятно, просто вывод $num++. Возможно, вам придется проверить, что в цикле, где вы их устанавливаете, вы получаете значение для $title = $first_h1->nodeValue;. Если у вас есть образец HTML-страницы, которую я мог бы попробовать, я бы смог ее проверить.
К сожалению, нет, я полностью удалил $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" }
АГА! Спасибо, Найджел! Я никогда не знал, что sort() сделал это! Задача решена!
Спасибо, это упорядочивает URL-адреса, но по какой-то причине заголовки, которые я хочу напечатать, отображаются просто как 0, 1, 2 ... и т. д., а не заголовки, которые я хотел из тегов <h1>. Что я еще делаю не так?