Хочу сделать тег, чтобы если есть ключевые слова в теге, то тег отображало, если нет ключевых слов, то не отображало.
Вот мой тег:
[keyText]#хештег|слово1,слово2,слово3[/keyText]
если есть ключевые слова, которые во второй половине после
|
(их может быть сколько угодно), то выводило
#хештег
. Не обязательно там должен быть хештег, может быть слово или словосочетание.
Вот код который написал:
$text = 'Уже наступило лето , а скоро наступит осень';
$tegs = '[keyText]#лето|лето,летний[/keyText] [keyText]#осень|осень,осенний[/keyText]';
if(strpos($tegs, "[keyText]") !== false) {
$tegsStr = str_replace("[keyText]", "", $tegs);
$tegsStr = str_replace("[/keyText]", "", $tegsStr); // Удаляю не нужные части тега
$exploded_type = explode("|", $tegsStr); // Разделяю на слово и теги
$tagsActive= false;
$keys = trim(mb_strtolower($exploded_type[1], 'UTF-8'));
$text_post = trim(mb_strtolower($text, 'UTF-8'));
$text_post = str_replace([".", "\n"], " ", $text_post);
$text_post = ltrim($text_post);
$text_post = preg_replace("/\s{2,}/", " ", $text_post);
$keys = preg_replace('/\s\s+/', ' ', $keys);
$keys = str_replace(', ', ',', $keys);
$key_array = explode(",", $keys);
$text_array = explode(" ", $text_post);
foreach ($text_array as $word) {
if ($word != NULL) {
if (in_array($word, $key_array)) {
$tagsActive= true;
}
}
}
if (!$tagsActive) {
$tegs = preg_replace('/\[keyText](.*)\[\/keyText]/', '', $tegs);
} else {
preg_match('/\[keyText](.*)\|/', $tegs, $matches, PREG_OFFSET_CAPTURE, 0);
print_r($matches);
$tegs = preg_replace('/\[keyText](.*)\[\/keyText]/', $matches[1][0], $tegs);
}
}
echo $text.'<br>'.$tegs; // Должно получиться предложение с хештегами (если есть ключевые слова)
Когда есть один тег, то он работает, а когда несколько, то работает только последний. Как сделать конструкцию правильно? Знаю что нужно перебирать массивами, но не могу понять как. Может кто помочь, исправить этот код.