PHP добавляет foreach к моему массиву - PullRequest
0 голосов
/ 04 ноября 2011

Я хотел бы добавить 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 ]

1 голос
/ 04 ноября 2011

Вы можете просто создать функцию, которая будет использоваться каждый раз, когда вы включаете теги в свой вывод:

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 внутри вашего массива.

0 голосов
/ 04 ноября 2011

Ну, во-первых, вы перезаписываете $data при каждом запуске цикла, так что будет отображаться только строка окончательного результата.

Как только это будет не так (исправьте с помощью $data[] = ...),попробуйте это:

...
'tags' => preg_replace( "/(?:^|,)([^,]+)/", "<a href=\"/search/$1\">$1</a>", $row->tags);
...
...