显示依赖于差异数组名称的数组成员

时间:2019-11-27 06:49:05

标签: php arrays laravel

我由laravel创建了一个网站,我想显示类别和相关的产品名称。

我有一个数组,像这样

$category  = [
    '1' => 'cat1',
    '2' => 'cat2'
];

$product = [
    '0' => array(
     'name' => 'product1',
     'category_id' => '2'
),
    '1' => array(
     'name' => 'product2',
     'category_id' => '2'
),
    '2' => array(
     'name' => 'product3',
     'category_id' => '2'
),
    '3' => array(
     'name' => 'product4',
     'category_id' => '1'
),
    '4' => array(
     'name' => 'product5',
     'category_id' => '1'
),
    '5' => array(
     'name' => 'product6',
     'category_id' => '2'
)]; 

我想这样显示

<h3>cat1</h3>
<p>product4</p>
<p>product5</p> 
<hr>
<hr> 
<h3>cat2</h3>
<p>product1</p>
<p>product2</p>
<p>product3</p>
<p>product6</p> 

您必须知道我正在使用laravel,并且想使用laravel来完成这项工作,但是您也可以使用PHP进行编码,我想我可以在laravel中进行转换

3 个答案:

答案 0 :(得分:1)

您可以在用例中使用Laravel集合的groupBy

在控制器文件中,按category_id键进行分组,然后通过循环在刀片中呈现它们。

控制器代码段:

public function someMethod(){
    $category  = [
        '1' => 'cat1',
        '2' => 'cat2'
    ];

    $product = [
        '0' => array(
         'name' => 'product1',
         'category_id' => '2'
    ),
        '1' => array(
         'name' => 'product2',
         'category_id' => '2'
    ),
        '2' => array(
         'name' => 'product3',
         'category_id' => '2'
    ),
        '3' => array(
         'name' => 'product4',
         'category_id' => '1'
    ),
        '4' => array(
         'name' => 'product5',
         'category_id' => '1'
    ),
        '5' => array(
         'name' => 'product6',
         'category_id' => '2'
    )]; 

    $category_collection = collect($product)->groupBy('category_id')->toArray();

    return view('your_blade_name',compact('category_collection','category'));
}

刀片片段:

@foreach($category_collection as $category_id => $data)
    <h3>{{ $category[$category_id] }}</h3>
    @foreach($data as $current_data)
        <p>{{ $current_data['name'] }}</p>
    @endforeach
<hr>
<hr> 
@endforeach

答案 1 :(得分:0)

您可以像下面一样使用简单的foreach循环:

foreach($category as $ind=>$cat){
    echo "<h3>".$cat."</h3>".PHP_EOL;
    foreach($product as $row){
        if($row['category_id'] == $ind) {
            echo "<p>".$row['name']."</p>".PHP_EOL;
        }
    }
    echo "<hr><hr>".PHP_EOL;
}

Demo

输出:

<h3>cat1</h3>
<p>product4</p>
<p>product5</p>
<hr><hr>
<h3>cat2</h3>
<p>product1</p>
<p>product2</p>
<p>product3</p>
<p>product6</p>
<hr><hr>

答案 2 :(得分:0)

尝试

@foreach($category as $key => $cat)
  <h3>{{$cat}}</h3>
@foreach($product as $pr)
    @if($pr['category_id'] == $key)
        <p>{{$pr['name']}}</p><br>
    @endif
@endforeach
 <br>
@endforeach