Я пытаюсь использовать числовые литералы с моим массивом $ test с preg_replace в PHP, вот что я получил:
$test["a"] = "hey";
// Find a as $0
echo preg_replace("/[a-z]/", "Found:$0", "a")."\n";
// Can replace it by "hey"echo preg_replace("/[a-z]/", $test['a'], "a")."\n";
// Can't replace it :/
echo preg_replace("/[a-z]/", $test["$0"], "a")."\n";
Как вы видите, последняя функция preg_replace не работает, в то время как две другие работают нормально … Я много раз пытался включить $ 0 с различными хитростями, но ничего не работает … Можете ли вы помочь мне, пожалуйста?
Ты можешь использовать preg_replace_callback()
:
echo preg_replace_callback("/[a-z]/", function ($b) use ($test) {
return $test[$b[0]];
}, "a")."\n";
С большим количеством тестов:
echo preg_replace_callback("/[a-z]/", function ($b) use ($test) {
if (isset($b[0]) && isset($test[$b[0]]))
return $test[$b[0]];
return "";
}, "a")."\n";
Ваш текущий вариант использования не требует регулярных выражений, вы можете (и должны, если возможно) использовать strtr
или же str_replace
в зависимости от требований:
$test["a"] = "hey";
$test["b"] = "you";
echo strtr("a b", $test); //hey you
echo str_replace(array_keys($test), array_values($test), "a b"); //hey you
Ссылаться на Когда использовать strtr против str_replace? на какие различия.