Laravel 5.0显示数组中的项,其中键的值与值匹配

时间:2019-05-20 08:14:53

标签: php laravel laravel-blade

我有一个看起来像这样的数组:

query($sql); $row = $d->fetch_array(); $hinhanh = $row['thumb']; $data=''; $data.='
'; $data.=''.$url.$hinhanh'; $data.='
'.$row['ten_'.$lang].'
'; $data.='
'; $data.='
'; return $data; } function get_price($pid){ global $d, $row,$price; $sql = "select giaban,khuyenmai from table_product where id=$pid"; $d->query($sql); $row = $d->fetch_array(); if($row['giaban'] !=0 && $row['khuyenmai'] == 0){ $price = $row['giaban']; }elseif($row['khuyenmai'] != 0){ $save_price = $row['khuyenmai']; $special_price = $row['giaban']-$save_price; $price = $special_price;   } return $price; } function remove_product($pid){ $pid=intval($pid); $max=count($_SESSION['cart']); for($i=0;$i<$max;$i++){ if($pid==$_SESSION['cart'][$i]['productid']){ unset($_SESSION['cart'][$i]); break; } } $_SESSION['cart']=array_values($_SESSION['cart']); } function get_order_total(){ $max=count($_SESSION['cart']); $sum=0; for($i=0;$i<$max;$i++){ $pid=$_SESSION['cart'][$i]['productid']; $q=$_SESSION['cart'][$i]['qty']; $price=get_price($pid); $sum+=$price*$q; } return $sum; } function get_total(){ $max=count($_SESSION['cart']); $sum=0; for($i=0;$i<$max;$i++){ $pid=$_SESSION['cart'][$i]['productid']; $q=$_SESSION['cart'][$i]['qty']; $sum+=$q; } return $sum; } function addtocart($pid,$q){ if($pid<1 or $q<1) return; if(is_array($_SESSION['cart'])){ if(product_exists($pid)) return; $max=count($_SESSION['cart']); $_SESSION['cart'][$max]['productid']=$pid; $_SESSION['cart'][$max]['qty']=$q; } else{ $_SESSION['cart']=array(); $_SESSION['cart'][0]['productid']=$pid; $_SESSION['cart'][0]['qty']=$q; } } function product_exists($pid){ $pid=intval($pid); $max=count($_SESSION['cart']); $flag=0; for($i=0;$i<$max;$i++){ if($pid==$_SESSION['cart'][$i]['productid']){ $_SESSION['cart'][$i]['qty'] +=1; $flag=1; break; } } return $flag; } ?>

现在,我将此数组发送到视图中,我的目标是在h1标签中显示item_type“ title”的内容。

我可以这样:

array:3 [▼
  0 => {#354 ▼
    +"id": 38
    +"block_newsletter_id": 102
    +"item_type": "title"
    +"html_key": ""
    +"content": "TITLE"
    +"properties": ""
  }
  1 => {#355 ▼
    +"id": 39
    +"block_newsletter_id": 102
    +"item_type": "text"
    +"html_key": ""
    +"content": "Some text. Hey."
    +"properties": ""
  }
  2 => {#356 ▼
    +"id": 40
    +"block_newsletter_id": 102
    +"item_type": "button"
    +"html_key": ""
    +"content": "click here"
    +"properties": ""
  }
]

但是,如果我想将item_type文本放入p标记中,则需要执行相同的操作。没有比为每个循环编写多个循环更好的方法了吗?

3 个答案:

答案 0 :(得分:0)

您可以在控制器的方法中准备类似此数组的内容并将其发送到视图:

$titleItemTypeContent = [];
foreach ($blockItemsContent as $blockItemContent)
{
    if ($blockItemContent->item_type == 'title')
        $titleItemTypeContent[] = [$blockItemContent->id, $blockItemContent->content];
}

并根据需要在刀片中重复使用$titleItemTypeContent

答案 1 :(得分:0)

您可以在控制器中对每种类型的组进行分组,例如:

collect($blockItemsContent)->groupBy('item_type');

并将其传递给视图,您就可以输入类型。

答案 2 :(得分:0)

根据您的问题 如果item_type = title,则显示在h1标签中 如果item_type = text,则显示在p标签中

其他显示在span标签中

在刀片文件中:

@foreach($blockItemsContent as $item)
     @if($item->item_type == 'title')
         <h1>{{ $item->content }}</h1>
     @elseif($item->item_type == 'text')
         <p>{{ $item->content }}</p>
     @else
          <span>{{$item->content}}</span>
     @endif
@endforeach