Sto cercando di sostituire gli articoli {{key}}
nel mio $text
con i valori di un array passato. ma quando ho provato ad aggiungere print_r
per vedere cosa stava succedendo ho ricevuto un errore Undefined variable: kvPairs
. Come posso accedere al mio modulo variabile all'interno dello preg_replace_callback
?Come accedere a una variabile all'interno di 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;
}
Aggiornamento:
ho provato la cosa global
campo di applicazione, ma non funziona neanche. Ho aggiunto 2 dichiarazioni di stampa per vedere cosa sta facendo, uno dentro e uno all'esterno dello 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;
}
L'output che ottengo è:
--date--1977-05-20--
==date====
Mi piacerebbe manipolare $ kvPairs per la prossima partita, questo è possibile o ho bisogno di una variabile globale per questo? – Wikunia
Se è necessario modificare '$ kvPairs' all'interno del callback, lo si passa ___by reference___:' function ($ match) use (& $ kvPairs) { ... } ' –