Laravel - 无法使用 blade 从多维数组中获取值
Laravel - can't get values from multidimensional array with blade
我在使用 laravel 中的 blade 遍历多维数组时遇到问题。我像这样从控制器发送数据:
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
中的第二个循环有效。虽然,当谈到上面提到的 blade 代码时,它没有。
我可能做错了什么。如何分别获取嵌套数组的值 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;
}
}
@foreach($brands as $brand)
{{$brand[0]}}
@endforeach
您需要查看数组的组织方式。深入第一层后,'Fender' 位于偏移量 [0]
处,'(2)' 位于偏移量 [1]
处,因此您只需要一个 foreach.
你得到 F
的原因是因为你得到 string 'Fender' 上的偏移量 [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
控制器
$brands = Brand::whereIn('id', $brand_ids)->lists('name', 'id');
Blade
@foreach($brands as $id => $brand)
Id: {{$id}}, Brand: {{$brand}}
@endforeach
这应该可以工作并节省您的性能,因为我们查询所有品牌而不是单独查询每个品牌。更好的方法是建立产品关系并以这种方式获取它们。
因为你想获得多维数组的第 2 层值,如果你知道第 2 层只有两个值,那你为什么不试试呢
@foreach($brands as $brand)
{{$brand[0]}} {{$brand[1]}}
@endforeach
我在使用 laravel 中的 blade 遍历多维数组时遇到问题。我像这样从控制器发送数据:
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
中的第二个循环有效。虽然,当谈到上面提到的 blade 代码时,它没有。
我可能做错了什么。如何分别获取嵌套数组的值 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;
}
}
@foreach($brands as $brand)
{{$brand[0]}}
@endforeach
您需要查看数组的组织方式。深入第一层后,'Fender' 位于偏移量 [0]
处,'(2)' 位于偏移量 [1]
处,因此您只需要一个 foreach.
你得到 F
的原因是因为你得到 string 'Fender' 上的偏移量 [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
控制器
$brands = Brand::whereIn('id', $brand_ids)->lists('name', 'id');
Blade
@foreach($brands as $id => $brand)
Id: {{$id}}, Brand: {{$brand}}
@endforeach
这应该可以工作并节省您的性能,因为我们查询所有品牌而不是单独查询每个品牌。更好的方法是建立产品关系并以这种方式获取它们。
因为你想获得多维数组的第 2 层值,如果你知道第 2 层只有两个值,那你为什么不试试呢
@foreach($brands as $brand)
{{$brand[0]}} {{$brand[1]}}
@endforeach