У меня есть такая строка:
http://mysite.com/script.php?fruit=apple
И у меня есть ассоциативный массив, подобный этому:
$fruitArray["apple"] = "green"; $fruitArray ["banana"] = "yellow";
Я пытаюсь использовать preg_replace для строки, используя ключв массиве вернуть ссылку на яблоко и заменить его зеленым, например:
$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 распознавался, имел обратную ссылку и заменялся зеленым?
$fruitArray[$1]
Спасибо!
Вам необходимо использовать флаг /e eval, или если вы можете сэкономить несколько строк preg_replace_callback.
/e
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.