Laravel - 无法通过刀片

时间:2015-05-06 00:47:59

标签: php arrays laravel blade

我无法使用laravel中的刀片循环遍历多维数组。我从控制器发送数据如下:

return View::make('store.categories')
            ->with('brands', $brands);

如果我死了转储数据:

array (size=2)
  0 => 
    array (size=2)
      0 => string 'Fender' (length=6)
      1 => string '(2)' (length=3)
  1 => 
    array (size=2)
      0 => string 'Gibson' (length=6)
      1 => string '(1)' (length=3)

我试过使用两个@foreach循环,但我无法让它工作:

@foreach($brands as $brand)
  @foreach($brand as $b)
  {{$b}}
  @endforeach
@endforeach

以上将输出:Fender (2) Gibson (1)

<小时/> 我试图将$b的0值输出到Fender,但它只打印$b数组中每个项目的0位置字符:

@foreach($brands as $brand)
  @foreach($brand as $b)
  {{$b[0]}}
  @endforeach    
@endforeach

以上将输出F ( G (

如果我在我的控制器中:

foreach ($brands as $b) {
    foreach($b as $key=>$v) {
       dd($v);
    }
}

它将输出string 'Fender' (length=6),这似乎是第一个@foreach内部的第二个循环。虽然,当谈到上面提到的刀片代码时,它并没有。

我可能做的事情非常糟糕。如何单独获取嵌套数组的值0和1的输出?任何帮助都非常感谢。

这就是我在控制器功能中创建数据的方法:

$products = Product::with('brand')->whereIn('category_id', $children->lists('id'));
$brand_ids = array();
$brands = array();

foreach ($products->get() as $p) {
    $brand_ids[] = $p->brand_id;
}
$brand_count = array_count_values($brand_ids); 
foreach ($brand_count as $key=>$value) {
    $query = Brand::where('id', '=', $key)->lists('name');
    // dd($query);
    foreach($query as $key=>$name) {
        $array = array(
             $name,
             '('.$value.')'
            );
        $brands[] = $array;
    }
}

3 个答案:

答案 0 :(得分:5)

控制器

$brands = Brand::whereIn('id', $brand_ids)->lists('name', 'id');

刀片

@foreach($brands as $id => $brand)
    Id: {{$id}}, Brand: {{$brand}}
@endforeach

这可以起作用并保存您的表现,因为我们会分别查询所有品牌而不是每个品牌。更好的方法是建立产品关系并以此方式实现。

答案 1 :(得分:0)

@foreach($brands as $brand)
  {{$brand[0]}}
@endforeach

您需要了解数组的组织方式。一旦你深入了解第一级,Fender&#39;在偏移[0]和&#39;(2)&#39;在偏移[1],所以你只需要一个foreach。

您获得F的原因是因为您在字符串&#39; Fender&#39;上获得了偏移[0]。 (或换句话说,第一个字母)因为第二个foreach带给你四个字符串,而不是数组。

$brands = [
  0 => 
    [
      0 => 'Fender',
      1 => '(2)'
    ],
  1 => 
    [
      0 => 'Gibson',
      1 => '(1)'
    ]
];

var_dump($brands);

foreach($brands as $brand) {
  echo $brand[0]."\n";
}

输出:

array(2) {
  [0]=>
  array(2) {
    [0]=>
    string(6) "Fender"
    [1]=>
    string(3) "(2)"
  }
  [1]=>
  array(2) {
    [0]=>
    string(6) "Gibson"
    [1]=>
    string(3) "(1)"
  }
}
Fender
Gibson

答案 2 :(得分:0)

因为你想获得多维数组的第二级值,如果你知道第二级只有两个值,那你为什么不尝试

@foreach($brands as $brand) 
    {{$brand[0]}} {{$brand[1]}}
@endforeach