使用键 Laravel 迭代数组
Iterate array with key Laravel
我有一个电子商务网站,在我的控制器中有一个代码可以控制购物车中显示的国家/地区列表。
如果我们所在国家/地区的价格大于或等于运往其他国家/地区的价格,则将这些国家/地区添加到列表中:
这是我的控制器代码:
$params['final_countries_list'] = [];
$list_countries = Config::get('app.web_config.shipment.countries');
$base_price = $list_countries[Config::get('app.web_country')]['price'];
foreach($list_countries as $key=>$value) {
if ($value['price'] <= $base_price)
$params['final_countries_list'][$key] = $value;
}
好吧,如果我执行 dd($params['final_countries_list']),我会得到这个结果。
array(13) {
["deu"] array(2) {
["name"] "Deutschland"
["price"] 9
}
["che"] array(2) {
["name"] "Schweiz"
["price"] 9
}
["fra"] array(2) {
["name"] "France"
["price"] 8
}
["gbr"] array(2) {
["name"] "United Kingdom"
["price"] 9
}
等等,等等...
现在我想在视图中查看这个(deu、fra、gbr 等)cart.blade.php
在cart.blade.php中有这段代码可以得到我想要的:
<select name="country" id="pais">
<option value="" selected><--- Choose Country ---></option>
<?php foreach($final_countries_list as $key => $value){?>
<option value="<?php echo $key?>"><?php echo $value. ' ('.$key.')';?></option>
<?php } ?>
</select>
我收到以下错误:
错误异常 (E_UNKNOWN)
数组到字符串的转换(查看:C:\xampp\htdocs\my_web_name\app\views\cart.blade.php)
我该如何解决?
最简单的方法就是不分配完整值,而只分配 name
:(如果您不需要视图中的价格)
foreach($list_countries as $key=>$value) {
if ($value['price'] <= $base_price)
$params['final_countries_list'][$key] = $value['name'];
}
更好一点(在我看来)
$list_countries = array_filter($list_countries, function($value){
return $value['price'] <= $base_price
});
$params['final_countries_list'] = array_map(function($value){
return $value['name'];
}, $list_countries);
问题是您正在遍历一个数组数组,但您正在处理的子数组就好像它是一个字符串(为什么会出现错误)。如果我理解正确的话,一个简单的改变就能得到你想要的:
<option value="<?php echo $key?>"><?php echo $value['name']. ' ('.$key.')';?></option>
你应该使用$country['name']
P.S。
如果您使用的是 Blade,您可以使用 Blade 助手简码
(例如 @foreach
)来简化您的代码。
考虑到这一点,您可以更简单地重写代码
<select name="country">
<option value="" selected>Select your county</option>
@foreach($final_countries_list as $key => $country)
<option value ="{{ $key }}">{{ $country['name'] }} ({{ $key }})</option>
@endforeach
</select>
我有一个电子商务网站,在我的控制器中有一个代码可以控制购物车中显示的国家/地区列表。
如果我们所在国家/地区的价格大于或等于运往其他国家/地区的价格,则将这些国家/地区添加到列表中:
这是我的控制器代码:
$params['final_countries_list'] = [];
$list_countries = Config::get('app.web_config.shipment.countries');
$base_price = $list_countries[Config::get('app.web_country')]['price'];
foreach($list_countries as $key=>$value) {
if ($value['price'] <= $base_price)
$params['final_countries_list'][$key] = $value;
}
好吧,如果我执行 dd($params['final_countries_list']),我会得到这个结果。
array(13) {
["deu"] array(2) {
["name"] "Deutschland"
["price"] 9
}
["che"] array(2) {
["name"] "Schweiz"
["price"] 9
}
["fra"] array(2) {
["name"] "France"
["price"] 8
}
["gbr"] array(2) {
["name"] "United Kingdom"
["price"] 9
}
等等,等等...
现在我想在视图中查看这个(deu、fra、gbr 等)cart.blade.php
在cart.blade.php中有这段代码可以得到我想要的:
<select name="country" id="pais">
<option value="" selected><--- Choose Country ---></option>
<?php foreach($final_countries_list as $key => $value){?>
<option value="<?php echo $key?>"><?php echo $value. ' ('.$key.')';?></option>
<?php } ?>
</select>
我收到以下错误:
错误异常 (E_UNKNOWN) 数组到字符串的转换(查看:C:\xampp\htdocs\my_web_name\app\views\cart.blade.php)
我该如何解决?
最简单的方法就是不分配完整值,而只分配 name
:(如果您不需要视图中的价格)
foreach($list_countries as $key=>$value) {
if ($value['price'] <= $base_price)
$params['final_countries_list'][$key] = $value['name'];
}
更好一点(在我看来)
$list_countries = array_filter($list_countries, function($value){
return $value['price'] <= $base_price
});
$params['final_countries_list'] = array_map(function($value){
return $value['name'];
}, $list_countries);
问题是您正在遍历一个数组数组,但您正在处理的子数组就好像它是一个字符串(为什么会出现错误)。如果我理解正确的话,一个简单的改变就能得到你想要的:
<option value="<?php echo $key?>"><?php echo $value['name']. ' ('.$key.')';?></option>
你应该使用$country['name']
P.S。
如果您使用的是 Blade,您可以使用 Blade 助手简码
(例如 @foreach
)来简化您的代码。
考虑到这一点,您可以更简单地重写代码
<select name="country">
<option value="" selected>Select your county</option>
@foreach($final_countries_list as $key => $country)
<option value ="{{ $key }}">{{ $country['name'] }} ({{ $key }})</option>
@endforeach
</select>