在Laravel中使用preg_replace

时间:2018-11-16 00:48:02

标签: php laravel preg-replace

我有text [mydata] some text [otherdata] some more text之类的数据库数据,我想用动态信息(例如类别标题)替换那些[mydata][otherdata]

所以我的数据结果如下:

text Category Title some text Category Desc some more text

代替

text [mydata] some text [otherdata] some more text

我认为preg_replace可能会发生这种情况,但还不确定。

代码

View::composer('*', function ($view) {
  $notes = Notes::all();
  foreach($notes as $note){
     $descrip= $note->description;
  }

  $view->with('descrip', $descrip);
});

更多

所以基本上$note->description的内容是这些数据:

text [mydata] some text [otherdata] some more text

我想用categories表中的数据替换那些元素。

有什么主意吗?

更新

好吧,我正在挖掘并在下面获取代码(使用str_replace),但是它存在一些问题,

View::composer('*', function ($view) {
            //getting categories and pull out the values i want to use as `[....]`
            $catC = Category::all();
            foreach($catC as $catD){
                $meta_title = $catD->title;
                $meta_desc = $catD->meta_description;
                $meta_tags = $catD->meta_tags;
            }
            //replace those categories values with element in database `[......]`
            $seotemplates = SeoTemplate::all();
            foreach($seotemplates as $seotemplate){
                $myCustom = str_replace_array('[cattitle]', [$meta_title, $meta_desc, $meta_tags], $seotemplate->categories_desc_template);
            }

            $view->with('myCustom', $myCustom);
        });

问题

  1. 我只能得到[cattitle],但是[catmeta] & [cattags]呢?
  2. $meta_title将始终返回类别表中的第一个值(例如,如果我访问HP类别页面,它将以ACER的形式返回[cattitle]或其他任何类别页面一直都是ACER

更新2

我解决了第一次更新的问题1,但仍然存在问题2,这里是更新的代码

View::composer('*', function ($view) {
            //categories
            $catC = Category::all();
            $catD = [];
            foreach($catC as $catD){
                $catD = [
                    $cattitle = $catD->title,
                    $catmeta = $catD->meta_tags,
                    $catdesc = $catD->meta_description
                ];
            }
            $a1 = array("[cattitle]","[catmeta]","[catdesc]");

            $seotemplates = SeoTemplate::all();
            foreach($seotemplates as $seotemplate){
               $myCustom = str_replace($a1, $catD, $seotemplate->categories_desc_template);
             }

            $view->with('myCustom', $myCustom);
});

当前问题:

  
      
  1. $meta_title将始终从类别表返回第一个值(例如,如果我正在访问HP类别页面,它将返回ACER为   [cattitle]或我访问的任何其他类别页面。永远都是ACER
  2.   

1 个答案:

答案 0 :(得分:0)

我发现您的代码存在一些问题,我认为这将有助于您寻求所要的解决方案。

首先,就像@hktang提到的那样,他在复制变量,然后一遍又一遍地分配它的值,而不是添加它。试试这个:

$catE = [];
foreach($catC as $catD){
    $catE[] = [
        $cattitle = $catD->title,
        $catmeta = $catD->meta_tags,
        $catdesc = $catD->meta_description
    ];
}

其次,您还需要通过的每个循环来重置$ myCustom的值。试试这个:

$myCustom = []  
foreach($seotemplates as $seotemplate){
    $myCustom[] = str_replace($a1, $catE, $seotemplate->categories_desc_template);
}

这应该导致您获得替换值的seotemplates数组,但我尚未对此进行测试。