Intereting Posts

Использование preg_replace для возврата к ссылочному массиву ключей и замена на значение

У меня есть строка вроде этого:

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.