一般的な答え:
たとえば、アンカーが置かれている 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コメントに基づいて編集:
何らかの方法で「タグ付け」しない限り、それは簡単ではありません。1 つの方法は、各アンカーにクラスを追加してから、ドキュメント全体を横断することです。
例:
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;
}