PHP将foreach添加到我的数组中

时间:2011-11-04 11:59:47

标签: php arrays foreach dry explode

我想将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 个答案:

答案 0 :(得分:1)

您可以创建一个函数,以便在输出中包含标记时使用它们:

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放在数组中。

答案 1 :(得分:0)

首先,你在每次循环运行时都覆盖$data,所以只列出最终结果行。

一旦完成(使用$data[] = ...修复),请尝试以下操作:

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