PHP:对于每个锚标记

Jos*_*h J 0 html php anchor each for-loop

我目前在我的网站上有一个标题为"服务"的侧栏,我想填写"Windows","Linux","Android"等类别.由于所有这些"类别"都存在于一个页面(services.php)中,我有一个想法来锚定它们中的每一个,所以我可以创建一个快速链接列表(services.php/#Windows,services.php /# Linux等等).我想要做的是使用PHP函数将我在Services.php页面上创建的所有锚点拉到侧栏,这样如果我编辑services.php和include <a id="tips">Other useful things</a>,侧栏会自动包含指向该锚点的链接.类似于"对于此页面上的每个锚点,链接到thispage.php /#anchor-name".

我希望这个问题比我的第一个更容易理解.我意识到我不是很清楚.

我知道我可以使用数据库表,但我希望它管理起来非常简单.

Tiv*_*vie 5

一般答案:

例如,假设你有一个id = anchors的导航栏,你的锚点就在那里.

示例HTML:

$html = '<html>(...)
<div id="anchors">
    <a href="anchor1.php">link number 1</a>
    <a href="anchor2.php">another link</a>
</div>
(...)
</html>';
Run Code Online (Sandbox Code Playgroud)

功能示例:

function findAnchors($html)
{
    $links = array();
    $doc = new DOMDocument();
    $doc->loadHTML($html);
    $navbars = $doc->getElementsByTagName('div');
    foreach ($navbars as $navbar) {
        $id = $navbar->getAttribute('id');
        if ($id === "anchors") {
            $anchors = $navbar->getElementsByTagName('a');
            foreach ($anchors as $a) {
                $links[] = $doc->saveHTML($a);
            }
        }
    }
    return $links;
}
Run Code Online (Sandbox Code Playgroud)

这将返回一个包含所有链接的数组.

输出:

array
  0 => string '<a href="anchor1.php">link number 1</a>' (length=39)
  1 => string '<a href="anchor2.php">another link</a>' (length=38)
Run Code Online (Sandbox Code Playgroud)

根据OP评论编辑:

除非你以某种方式"标记"它们,否则它并非无足轻重.一种方法是为每个锚添加一个类,然后横向整个文档.

例:

HTML

$html = '<html>(...)
<a class="anchor" href="anchor1.php">link number 1</a>
(... stuff in here)
<a class="anchor" href="anchor2.php">another link</a>
(...)
</html>';
Run Code Online (Sandbox Code Playgroud)

功能:

function findAnchors($html)
{
    $links = array();
    $doc = new DOMDocument();
    $doc->loadHTML($html);
    $aTags = $doc->getElementsByTagName('a');
    foreach ($aTags as $a) {
        $class = $a->getAttribute('class');
        if ($class === "anchor") {
            $links[] = $doc->saveHTML($a);
        }
    }
    return $links;
}
Run Code Online (Sandbox Code Playgroud)