Моя система упоминаний нуждается в чем-то. Я создал следующий код для сохранения упомянутого пользователя с помощью php и mysql.
Текст таков:
$text = 'Hi @john ! Need help @stack .';
Сохранение запроса
$mention_regex = '/@([A-Za-z0-9_]+)/i';
preg_match_all($mention_regex, $text, $matches);
foreach ($matches[1] as $match) {
$match = mysqli_real_escape_string($db, $match);
}
$mentionTime = time();
$mention_sql = mysqli_query($db,"INSERT INTO mentions (m_uid_fk,
m_status,
m_time )
SELECT user_id, '$uid','$mentionTime'
FROM users
WHERE user_name IN ('" .implode("','", $matches[1]). "')")
or die(mysqli_error($db));
Мой вопрос: Если в тексте указано имя пользователя, как, например, @john
тогда не сохраняйте таблицу упоминаний для этого имени пользователя.
Есть ли способ сделать это с моим запросом?
Ты можешь использовать StrPos проверить наличие определенного текста в строке:
$search = '@john';
$string = 'Hi @john ! Need help @stack .';
if (!strpos($string, $search)) {
# run save code
}
альтернативный ответ
использование array_filter —
$users = ['@john', '@trey', '@azzo'];
$data = array_filter($users, function($el)
{
return ($el !== '@john');
});
echo '<pre>'. print_r($data, 1) .'</pre>';
с array_filter
Вы можете указать возвращаемые значения, используя функцию, которая проверяет элемент на соответствие условию. Тогда просто foreach
тот $data
массив и запустить ваш код только для этого.
например
foreach ($data as $item)
{
# run save code
}
Других решений пока нет …