2015-09-18 3 views
3

У меня возникла проблема с тем, что код возвращает «Мужчины» для всех значений «Женщины», поскольку в нем также содержится термин «Мужчины». Я тщетно пытался «~ \ bWord \ b ~».Соответствие точной строки в строке

Как можно изменить код ниже для возврата разных значений?

function replaceWords($value) { 
//here are predefined values 
$predefined = array(
array(
'search'=>'Women', 
'replaceWith'=>'Women' 
), 
array(
'search'=>'Men', 
'replaceWith'=>'Men' 
) 
); 
//search and replace 
$found = false; 
foreach ($predefined as $item) { 
$search = array_map('trim', explode(',', $item['search'])); 
foreach ($search as $s) { 
if (strstr(strtolower($value), strtolower($s))) { 
$found = true; 
$value = $item['replaceWith']; 
break; 
} 
} 
} 
return ($found)?$value:""; 
} 

Помощь очень ценится.

+1

Привет, это замена строки с различными словами в одно слово. Например, «Мужчины любят виджетов» и меняют это на «Мужчин» –

ответ

0

просто не используют strtolower()

«Женщины» и «Мужчины» не будет соответствовать, если вы держите его чувствительно к регистру.

+0

Спасибо, я думал то же самое. Не могли бы вы рассказать мне, как можно переписать: if (strstr (strtolower ($ value), strtolower ($ s))) {' –

+0

if (strstr ($ value, $ s)) {...... ...... –

0

Это работает для меня:

if (preg_match("/\b".strtolower($s)."\b/i", strtolower($value))) { 
Смежные вопросы