PHP добавляет foreach к моему массиву
Я хотел бы добавить HTML к элементу в моем массиве, прежде чем отражать его на моей странице, и я не уверен, как это сделать.
Мои данные помещаются в массив следующим образом:
$query = $this->db->get();
foreach ($query->result() as $row) {
$data = array(
'seo_title' => $row->seo_title,
'seo_description' => $row->seo_description,
'seo_keywords' => $row->seo_keywords,
'category' => $row->category,
'title' => $row->title,
'intro' => $row->intro,
'content' => $row->content,
'tags' => $row->tags
);
}
return $data;
Я хотел бы выполнить следующее для моих "тегов" перед возвратом данных в мое представление:
$all_tags = explode( ',' , $row->tags );
foreach ( $all_tags as $one_tag ){
echo '<a href="/search/'. $one_tag .'">' . $one_tag . '</a>';
Причиной для этого является то, что теги в моей базе данных не содержат html и просто разделены запятыми, вот так news,latest,sports
и я хочу превратить их в <a href="/search/sports">sports</a> ...
Моя причина сделать это здесь, а не когда я повторяю данные, состоит в том, что я не хочу повторяться на каждой странице.
2 ответа
Вы можете просто создать функцию, которая будет использоваться каждый раз, когда вы включаете теги в свой вывод:
function formatTags($tags) {
$tmp = explode(',', $tags);
$result = "";
foreach ($tmp as $t) {
$result .= sprintf('<a href="/search/%s">%s</a>',
urlencode(trim($t)), htmlentities(trim($t)));
}
return $result;
}
И всякий раз, когда вы делаете что-то вроде echo $tags;
ты сделаешь echo formatTags($tags);
вместо. Код представления должен быть отделен от кода модели, поэтому я бы посоветовал не размещать HTML внутри вашего массива.
Ну, во-первых, вы перезаписываете $data
с каждым запуском цикла, поэтому будет отображаться только строка окончательного результата.
Как только это из пути (исправить с $data[] = ...
), попробуй это:
...
'tags' => preg_replace( "/(?:^|,)([^,]+)/", "<a href=\"/search/$1\">$1</a>", $row->tags);
...