Используйте числовые литералы с массивом в PHP (preg_replace)

Я пытаюсь использовать числовые литералы с моим массивом $ 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 с различными хитростями, но ничего не работает … Можете ли вы помочь мне, пожалуйста?

2

Решение

Ты можешь использовать 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";
2

Другие решения

Ваш текущий вариант использования не требует регулярных выражений, вы можете (и должны, если возможно) использовать 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? на какие различия.

0

По вопросам рекламы [email protected]