Проблема, связанная с PHP BBCode.Как получить значения между двумя тегами? - PullRequest
1 голос
/ 05 января 2012

Мне нужно сделать следующее для моего сайта.

$comment = "[item]Infinity Edge[/item]<br>[item]Eggnog Health Potion[/item]";
$this->site->bbcode->postBBCode($comment);

Функция BBCode выглядит следующим образом:

function postBBCode($string)
{
            $string = nl2br($string);
            $string = strip_tags($string, '<br></br>');
            $string = $this->tagItem($string);
            return $string;
}

function tagItem($string)
{
     //Get all values between [item] and [/item] values
     //Appoint them to an array.
     //foreach item_name in array, call convertItems($item_name) function.
     //Now, each item_name in array will be replaced with whatever  convertItems($item_name) function returns.
     //return modified string
}

function convertItems($itemName)
{
    // -- I already made this function, but let me explain what it does.
    //Query the database with $itemName.
    //Get item_image from database.
    //Return '<img src="$row['item_image']></img>';
}

Хорошо, я уже задавала свои вопросы между функциями.Надеюсь, вы поняли, что я пытаюсь сделать.

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

У меня трудные времена - правильное получение значений между тегами [item] и [/ item].Он должен получать все найденные правильные совпадения, а не первое совпадение.

1 Ответ

2 голосов
/ 05 января 2012

Если вы используете preg_match_all для $ string, вы получите набор результатов со всеми совпадениями:

    $results = array();
preg_match_all('#\[item\](.*?)\[\/item\]#', $string, $results);

$ results будет иметь массив результатов, который выглядит следующим образом:

Array
(
    [0] => Array
        (
            [0] => [item]Infinity Edge[/item]
            [1] => [item]Eggnog Health Potion[/item]
        )

    [1] => Array
        (
            [0] => Infinity Edge
            [1] => Eggnog Health Potion
        )

)

Теперь вы должны быть в состоянии циклически просмотреть $ results [1] и отправить его через convertItems.

...