该项目由一个横向菜单组成,其中包含我所有的博客条目。从理论上讲,菜单是这样工作的:我使用 php 获得每个博客文档的<h1>
标题和他的相应href
。
所以每次我添加新的博客条目时,它都会自动出现在菜单中,我使用fopen和fread来做到这一点,并将我博客的每个PHP文档的内容保存在一个名为$leer的变量中。
然后,我使用Preg_match_all搜索每个博客条目的标题并将其显示在菜单上。有了这个,我可以制作菜单而无需手动添加链接,也可以使用 scandir 获取网址。
问题是,在数组中使用preg_match_all时,会给我许多不正确的结果,四次获得相同的<h1>
标题而没有解释。这是代码:
$escanear = scandir ("/home/sites/thetoptenweb.com/public_html/post");
$tamanoArray = count($escanear);
所以首先,正如你所看到的,我使用 scandir 和 count 来获取页数。
for($i=2;$i<=$tamanoArray-3;$i++){
$abrirFichero = fopen($escanear[$i],"r");
$leer=fread($abrirFichero, filesize($escanear[$i]));
fclose($abrirFichero);
}
然后,我使用 for 循环和 fread 来阅读我的所有文档。循环的目的是只"扫描"第二个和最后 3 个之间的选定文件,因为这些是我的博客条目。
preg_match_all('%<h1>(.*)</h1>%', $leer, $arrayMaches);
因此,使用 preg_match_all
函数,我在多维数组中获取文档的标题,我认为该数组给我带来了问题,因为我试图用 foreach
循环读取每个结果,但有一些空白结果,我不知道为什么会这样。
foreach ($arrayMaches as $result) {
foreach ($result as $key) {
}
}
$cortado=preg_split('%</?h1>%', $key);
echo "<a href=".'"'.$escanear[$i].'"'."><li>".$cortado[0]."</li></a><hr>";
最后,我使用 foreach 循环来访问preg_match_all的多维数组。然后,我preg_split结果以获取没有html标签的文本,然后显示带有echo的结果。
希望有人帮助我认识到问题,如果可能的话,对preg_match_all数组进行解释,因为我不明白它是如何创建的。建议被接受。如果你知道更好的方法,我很乐意阅读它。这是整个代码:
<?php
$escanear = scandir ("/home/sites/thetoptenweb.com/public_html/post");
$tamanoArray = count($escanear);
for($i=2;$i<=$tamanoArray-3;$i++){
$abrirFichero = fopen($escanear[$i],"r");
$leer=fread($abrirFichero, filesize($escanear[$i]));
fclose($abrirFichero);
preg_match_all('%<h1>(.*)</h1>%', $leer, $arrayMaches);
foreach ($arrayMaches as $result) {
foreach ($result as $key) {
}
}
$cortado=preg_split('%</?h1>%', $key);
echo "<a href=".'"'.$escanear[$i].'"'."><li>".$cortado[0]."</li></a><hr>";
}
?>
谢谢。
只需使用 DOM... 你会省去一些麻烦。
$menuData = array();
$iter = new DirectoryIterator('/home/sites/thetoptenweb.com/public_html/post');
foreach ($iter as $file) {
if ($file->isFile()) {
$filename = $file->getFilename();
$path = $file->getPathname();
$dom = new DOMDocument();
$dom->loadHtmlFile($path);
$titleNode = $dom->getElementsByTagname('h1')->item(0);
if ($titleNode) {
$title = $titleNode->nodeValue;
$menuData[$filename] = $title;
}
}
}
现在你已经有了所有的东西$menuData
你可以循环它并输出链接,假设文件名是适当的URL。或者,您可以直接输出循环中的链接,但分离内容更明智。创建一个函数来获取所需的数据,然后使用该数据进行输出。
但更好的解决方案是选择一个博客平台并使用它,然后花时间编写导入器并调整外观和感觉以适应。