Intereting Posts

используйте preg_replace для замены целых слов с помощью ассоциативного массива

У меня есть этот сменный массив с именем $initialdata :

 array ($initialdata) 'd' => string '1.40' (length=4) 'a' => string '1.67' (length=4) 'vi' => string '0' (length=1) 't' => string '?' (length=1) 

Тогда у меня есть эта строка:

 $str = "-(vi + sqrt(2*a*d + vi^2))/a)"; 

Когда я делаю :

 str_replace(array_keys($initialdata),array_values($initialdata),$str); 

Я получил :

 -(0 + sqr?(2*1.67*1.40 + 0^2))/1.67) 

Случилось так, что «t» «sqrt» был заменен значением «t» в моем массиве $initialdata . Я знаю, что это происходит из-за того, что я использую str_replace , и мне нужно сопоставить целые слова с помощью preg_replace , однако я никогда не видел реализации preg_replace с использованием ассоциативных массивов для соответствия любому целому слову. Как это можно достичь, если это возможно?

В регулярном выражении \b – это границы слов. Это должно работать:

 $data = array( '/d/' => '1.40', '/a/' => '1.67', '/vi/' => '0', '/\bt\b/' => '?' ); $result = preg_replace(array_keys($data), array_values($data), $str);