Проблема с регулярным выражением (PHP)
Суть в том, что почему-то выводится только первый ББкод из сообщения (БД MySQL), все остальные почему-то просто срезается. К примеру, есть сообщение: "Всем привет [id]1[/id]. Есть новое на [id]2[/id]"
Код:
function id($id){
$id = preg_replace('/\[id\]([0-9]+)\[\/id\]/', '$1', $id);
$q = DB::$dbs->query("SELECT `id`,`name` FROM `station` WHERE `id` = '".$id."'");
while($station = $q -> fetch())
{
return '[<a href="/'.$station[id].'">'.$station[name].'</a>]';
}
}
Использую так:
echo id(message['id']);
Выводит:
"Всем привет [ссылка]. Есть новое на "
Почему так происходит?
Ответы (1 шт):
Автор решения: Slava Rozhnev
→ Ссылка
Вот возможное решение задачи:
<?php
function get_ids($str) {
preg_match_all('/\[id\]([0-9]+)\[\/id\]/m', $str, $ids);
return $ids[1];
}
function id_to_link($id){
global $mysqli;
$stmt = $mysqli->prepare('SELECT `id`,`name` FROM `station` WHERE `id` = ?');
$stmt->bind_param("i", $id);
$stmt->execute();
$stmt->bind_result($id, $name);
while($station = $stmt -> fetch())
{
return '[<a href="/'.$id.'">'.$name.'</a>]';
}
}
$ids = get_ids('Всем привет [id]1[/id]. Есть новое на [id]2[/id]');
foreach ($ids as $id) {
echo id_to_link($id);
}