首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 遞迴函式實戰:多維陣列 HTML 特殊字元轉換

     編輯:PHP 相關知識

應用場景

處理巢狀陣列時,常需對所有字串值統一進行轉義或替換。遞迴函式能優雅地處理任意深度的多維結構,避免寫死層數。

核心實作

<?php
/**
 * 遞迴將陣列中所有字串的 < > 替換為 { }
 *
 * @param mixed $data 字串或陣列
 * @return mixed 處理後的資料,結構不變
 */
function sanitizeBrackets(mixed $data): mixed
{
    if (is_array($data)) {
        foreach ($data as $key => $value) {
            $data[$key] = sanitizeBrackets($value);
        }
        return $data;
    }

    // 純字串處理
    return str_replace(['<', '>'], ['{', '}'], $data);
}

// 測試資料:三層巢狀陣列
$raw = [
    '< 小剛>',
    '< 小曉>',
    [
        '<小強>',
        [
            '<浪人>'
        ]
    ],
    '< 小飛>',
    '< 小李>',
    '< 小紅>'
];

$clean = sanitizeBrackets($raw);

echo '<pre>';
print_r($clean);
echo '</pre>';

輸出結果

Array
(
    [0] => { 小剛}
    [1] => { 小曉}
    [2] => Array
        (
            [0] => {小強}
            [1] => Array
                (
                    [0] => {浪人}
                )
        )
    [3] => { 小飛}
    [4] => { 小李}
    [5] => { 小紅}
)

遞迴設計要點

原則說明
終止條件is_array() 為 false 時,直接處理純量值並回傳
遞迴步驟遍歷陣列,對每個元素呼叫自身,並將回傳值寫回原鍵
引用傳遞使用 $key => $value 並寫回 $data[$key],保持原陣列結構
型別安全PHP 8.0+ 可加 mixed 型別提示,支援字串、整數、null 等混合型別

常見變體:HTML 實體編碼

function deepHtmlspecialchars(mixed $data): mixed
{
    if (is_array($data)) {
        return array_map('deepHtmlspecialchars', $data);
    }
    return is_string($data) ? htmlspecialchars($data, ENT_QUOTES, 'UTF-8') : $data;
}

效能考量

  • 極深層(>1000 層)可能觸發堆疊溢位,若資料結構不可控,考慮改用迭代 + 堆疊模擬。
  • 大量資料時,array_walk_recursive() 內建函式效能略優於自訂遞迴。

總結

遞迴是處理樹狀、圖狀資料的利器。掌握「終止條件 → 遞迴拆解 → 結果合併」三步驟,即可輕鬆應對多維陣列轉換、目錄掃描、JSON 序列化等場景。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved