2016-08-12 5 views
0

Проблема: мне нужно проверить строку для ключевых фраз и, если она содержит эти фразы, назначить определенное имя тега.Поиск ключевых фраз в строках: PHP

Я работаю в WordPress с PHP.

код, который я создал до сих пор есть:

/* WOMENS SPORTSWEAR TAGS */ 
function map_womens_sportswear_tags($tag_name) { 
$tags = array(
    'Womens Tracksuit Pants' => array( 
     'Tracksuit Pants', 
     'Sweatpants', 
     'Shell Pants', 
     'Jogger Pants', 
     'Jogging Bottoms', 
     ), 
    'Womens Tracksuit Jackets' => array( 
     'Tracksuit Jacket', 
     ), 
    'Womens Fleece Jacket' => array(
     'Fleece', 
     ), 
    ); 

foreach($tags as $tag => $values) { 
    $current_tag = $tag; // Current tag is the name of the tag, like Womens Sports Shoe or Womens Tracksuit Pants 
    foreach($values as $value) { 
     if (strtolower($value) == strtolower($tag_name) || stripos($tag_name, $current_tag )) { 
      return $current_tag; // Returns tag name, i.e. 'Womens Sports Shoe' or 'Womens Tracksuit Pants' 
      break; 
     } 
    } 
} 
return $tag_name; 
} 

Поэтому, если строка содержит слово Беговых днищ, назначить женщина Tracksuit штаны. Я использовал stripos для этой цели, однако я не могу заставить код работать.

Пожалуйста, может кто-нибудь указать мне в правильном направлении, поскольку я новичок в кодировании. Спасибо заранее.

+0

После первой встречи с тегом используют 'return', который возвращает' $ current_tag' из функции. Если я правильно понимаю, вы должны поместить теги в массив и вернуть весь массив в конце функции. –

+1

не имеет смысла использовать перерыв после возврата, заявление будет недостижимым. Используйте это для второго параметра в if (stripos()! == false); –

ответ

0

Кажется, вы просто перепутали ваш variabled в если заявление:

if (strtolower($value) == strtolower($tag_name) || stripos($tag_name, $current_tag )) { 

должен быть

if (strtolower($value) == strtolower($tag_name) || stripos($tag_name, $value )) { 
+0

Спасибо всем - и особенно A.L. – hs1972

+0

Ваше редактирование отлично работало на тесте, которое я сделал только сейчас. – hs1972

+0

всегда рад, что могу помочь. пожалуйста, отметьте мой ответ как принятый. –

0

Если я правильно понял, вы ищите тег, который соответствует $tag_name, переданному вашей функции. В вашем stripos (если я прав) у вас есть inverted parameters: 1. строка 2. Вашего ключевого слова, чтобы найти в строке

Проверьте, если результат !== false, потому что только с простым, если, в результате 0 (при первом вводе строки), который вернет false (See the red section in the doc).

0

попробовать это:

foreach($tags as $tag => $values) { 
    $current_tag = $tag; // Current tag is the name of the tag, like Womens Sports Shoe or Womens Tracksuit Pants 
    foreach($values as $value) { 
     if (strtolower($value) == strtolower(trim($tag_name)) || stripos(trim($tag_name), $current_tag )) { 
      return $current_tag; // Returns tag name, i.e. 'Womens Sports Shoe' or 'Womens Tracksuit Pants' 
      break; 
     } 
    } 
} 
Смежные вопросы