Laravel - 无法使用刀片从多维数组中获取值
Posted
技术标签:
【中文标题】Laravel - 无法使用刀片从多维数组中获取值【英文标题】:Laravel - can't get values from multidimensional array with blade 【发布时间】:2015-07-15 22:27:18 【问题描述】:我在 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;
【问题讨论】:
使用 dd 并不能证明它有效。 dd 结束执行,如果你使用两个 foreachs,你仍然会得到四个字符串,而不是你之后的两个字符串(Fender 和 Gibson)。 是的,你只需要一个 foreach。问题是为什么它在视图中显示为[
。
我用来生成brands
数据的方式有问题吗?
@cchacholiades 你想要的输出是什么?你想在刀片中生成什么?
对不起@PawelBieszczad 我正在尝试访问品牌array
位置0
和1
,例如它第一次循环b[0]
输出Fender
和b[1]
输出(2)
,第二次b[0]
输出Gibson
和b[1]
输出(1)
【参考方案1】:
@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
【讨论】:
感谢您的回复。我试过了,它返回:[ [
鉴于现有数据,我不明白这怎么可能。
我没有任何 Laravel 设置来测试它,但 php 已在我的编辑中得到验证。
使用您的确切代码添加更新,并在 foreach 中转储 $brand。【参考方案2】:
控制器
$brands = Brand::whereIn('id', $brand_ids)->lists('name', 'id');
刀片
@foreach($brands as $id => $brand)
Id: $id, Brand: $brand
@endforeach
这应该会起作用并节省您的性能,因为我们会查询所有品牌,而不是单独查询每个品牌。更好的方法是建立产品关系并以这种方式获取它们。
【讨论】:
【参考方案3】:既然你想得到多维数组的第二级值,而且如果你知道第二级只有两个值,那你为什么不试试
@foreach($brands as $brand)
$brand[0] $brand[1]
@endforeach
【讨论】:
以上是关于Laravel - 无法使用刀片从多维数组中获取值的主要内容,如果未能解决你的问题,请参考以下文章