遞歸函數(shù)在 php 中可用于遍歷數(shù)據(jù)結(jié)構(gòu),例如 html 文檔。它本質(zhì)上是函數(shù)調(diào)用自身的方法。該技術(shù)在處理復(fù)雜數(shù)據(jù)結(jié)構(gòu)時具有優(yōu)勢。一個基本用法是遍歷 html 文檔,打印節(jié)點名稱并遞歸調(diào)用子節(jié)點。一個實戰(zhàn)案例是提取 html 文檔中的文本,其中函數(shù)附加當(dāng)前節(jié)點的文本值并遞歸遍歷子節(jié)點。
PHP 遞歸函數(shù)遍歷 HTML 文檔
簡介
遞歸函數(shù)是一種在 PHP 中用于遍歷數(shù)據(jù)結(jié)構(gòu)的強大技術(shù),本質(zhì)上是當(dāng)函數(shù)調(diào)用自身時發(fā)生的情況。在處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(例如 HTML 文檔)時,使用遞歸函數(shù)具有很大的優(yōu)勢。
基本用法
以下是一個使用遞歸函數(shù)遍歷 HTML 文檔的基本示例:
function traverse_html($html) {
// 如果當(dāng)前節(jié)點是元素,則打印其名稱
if ($html->nodeName) {
echo $html->nodeName . "<br>";
}
// 遍歷子節(jié)點
foreach ($html->childNodes as $child) {
// 遞歸調(diào)用函數(shù)遍歷子節(jié)點
traverse_html($child);
}
}
登錄后復(fù)制
實戰(zhàn)案例:提取文本
要演示遞歸函數(shù)的實際應(yīng)用,我們可以編寫一個函數(shù)來從 HTML 文檔中提取純文本:
function extract_text($html) {
$text = "";
// 如果當(dāng)前節(jié)點是文本,則附加到結(jié)果
if ($html->nodeType == XML_TEXT_NODE) {
$text .= $html->nodeValue;
}
// 遍歷子節(jié)點并遞歸調(diào)用函數(shù)
foreach ($html->childNodes as $child) {
$text .= extract_text($child);
}
return $text;
}
登錄后復(fù)制
使用示例
要使用這些函數(shù),我們可以加載 HTML 文檔到 DOMDocument 對象并調(diào)用遍歷函數(shù):
$html_doc = new DOMDocument();
$html_doc->loadHTMLFile('document.html');
// 遍歷和打印 HTML 文檔的節(jié)點名稱
traverse_html($html_doc);
// 提取 HTML 文檔中的純文本
$text = extract_text($html_doc);
echo $text;
登錄后復(fù)制






