У меня есть строка вроде этого:
http://mysite.com/script.php?fruit=apple
И у меня есть ассоциативный массив вроде этого:
$fruitArray["apple"] = "green"; $fruitArray ["banana"] = "yellow";
Я пытаюсь использовать preg_replace в строке, используя ключ в массиве для обратного ссылки apple и заменить его на зеленый, например:
$string = preg_replace('|http://mysite.com/script.php\?fruit=([a-zA-Z0-9_-]*)|', 'http://mysite.com/'.$fruitArray[$1].'/', $string);
Процесс должен вернуться
http://mysite.com/green/
Очевидно, это не работает для меня; как я могу манипулировать $fruitArray[$1]
в инструкции preg_replace, чтобы PHP распознавался, ссылался назад и заменялся зеленым?
Благодаря!
Вам нужно использовать флаг /e
eval, или если вы можете сэкономить несколько строк preg_replace_callback
.
$string = preg_replace( '|http://mysite.com/script.php\?fruit=([a-zA-Z0-9_-]*)|e', ' "http://mysite.com/" . $fruitArray["$1"] ', $string );
Обратите внимание, что все конкатенационное выражение URL заключено в одинарные кавычки. Он будет интерпретироваться как выражение PHP позже, пробелы исчезнут, а статическая строка URL будет объединена с тем, что находится в fruitArray.