【问题标题】:PHP: For each anchor tagPHP:对于每个锚标记
【发布时间】:2012-10-24 11:57:50
【问题描述】:

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

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

我知道我可以为此使用数据库表,但我希望它非常易于管理。

【问题讨论】:

  • 有点笼统,因为我们不知道这些链接是如何生成的
  • 有代码吗?没有代码,没有答案!
  • 我会改变我的问题,让它更清楚一点。
  • 更新了原始问题。谢谢大家。

标签: php html for-loop anchor each


【解决方案1】:

如果您想拥有linkname 对,是的,您将在这里使用foreach() 函数。假设你有类似的东西:

$links = array(
    "index.html" => "Home",
    "about.html" => "About Us",
    "contact.html" => "Contact Us"
);

您可以使用此代码来显示它:

foreach ($links as $link => $name) {
    echo "<a href=\"$link\">'$name'</a>";
}

它以这种方式显示:

<a href="index.html">Home</a>
<a href="about.html">About Us</a>
<a href="contact.html">Contact Us</a>

这是你想要的吗?

【讨论】:

  • 嗨,差不多了。正如我对给出类似回应的 Tivie 所说,我希望避免创建静态数据(例如数组)。 Tivie 对他的功能很满意,但我正在寻找页面中的 foreach 锚标记(而不是特定的数组或 div 部分)。我已经更新了我原来的问题,以便更好地理解。谢谢
【解决方案2】:

一个通用的答案:

例如,假设您有一个 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>';

示例函数:

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;
}

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

输出:

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

根据 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>';

功能:

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;
}

【讨论】:

  • 这看起来有点小调整。我能看到的唯一问题是我希望将这些锚标签展开,例如:&lt;anchor&gt;Hello&lt;/anchor&gt;Welcome to my website..&lt;anchor&gt;Bye&lt;/anchor&gt;Goodbye。我不会在 div 中包含所有锚点。
猜你喜欢
  • 2020-04-05
  • 2014-06-09
  • 2011-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
  • 2011-03-02
  • 1970-01-01
相关资源
最近更新 更多