遞歸函數(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ù)附加當前節(jié)點的文本值并遞歸遍歷子節(jié)點。
PHP 遞歸函數(shù)遍歷 HTML 文檔
簡介
遞歸函數(shù)是一種在 PHP 中用于遍歷數(shù)據(jù)結(jié)構(gòu)的強大技術(shù),本質(zhì)上是當函數(shù)調(diào)用自身時發(fā)生的情況。在處理復(fù)雜的數(shù)據(jù)結(jié)構(gòu)(例如 HTML 文檔)時,使用遞歸函數(shù)具有很大的優(yōu)勢。
基本用法
以下是一個使用遞歸函數(shù)遍歷 HTML 文檔的基本示例:
function traverse_html($html) { // 如果當前節(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 = ""; // 如果當前節(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ù)制