簡體   English   中英

如何在preg_replace_callback內部訪問變量?

[英]How do I access a variable inside of preg_replace_callback?

我試圖用傳遞數組中的值替換$text {{key}}項。 但是當我嘗試添加print_r以查看發生了什么時,我得到了一個Undefined variable: kvPairs錯誤。 如何在preg_replace_callback訪問變量形式?

public function replaceValues($kvPairs, $text) {
    $text = preg_replace_callback(
        '/(\{{)(.*?)(\}})/',
        function ($match) {
            $attr = trim($match[2]);
            print_r($kvPairs[strtolower($attr)]);
            if (isset($kvPairs[strtolower($attr)])) {
                return "<span class='attr'>" . $kvPairs[strtolower($attr)] . "</span>";
            } else {
                return "<span class='attrUnknown'>" . $attr . "</span>";
            }
        },
        $text
    );
    return $text;
}

更新:

我已經嘗試了global范圍的事情,但它也不起作用。 我添加了2條打印語句以查看正在執行的操作,在preg_replace_callback內部和外部。

public function replaceValues($kvPairs, $text) {
    $attrTest = 'date';
    print_r("--" . strtolower($attrTest) . "--" . $kvPairs[strtolower($attrTest)] . "--\n");
    $text = preg_replace_callback(
        '/(\{{)(.*?)(\}})/',
        function ($match) {
            global $kvPairs;
            $attr = trim($match[2]);
            print_r("==" . strtolower($attr) . "==" . $kvPairs[strtolower($attr)] . "==\n");
            if (isset($kvPairs[strtolower($attr)])) {
                return "<span class='attr'>" . $kvPairs[strtolower($attr)] . "</span>";
            } else {
                return "<span class='attrUnknown'>" . $attr . "</span>";
            }
        },
        $text
    );
    return $text;
}

我得到的輸出是:

--date--1977-05-20--
==date====

由於您的回調函數是一個閉包,因此您可以通過use傳遞額外的參數

function ($match) use ($kvPairs) {
    ...
}

比污染全球空間更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM