使用关键Laravel迭代数组

时间:2015-01-30 15:27:01

标签: php arrays laravel foreach key

我有一个电子商务网站,在我的控制器中,我有一个代码,用于控制购物车中显示的国家/地区列表。

如果我们所在国家/地区的价格大于或等于运往其他国家/地区的价格,则会将这些国家/地区添加到列表中:

enter image description here

这是我的控制器代码:

 $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 [&#39; final_countries_list&#39;]),我会得到这个结果。

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
}

等,等...

现在我想在视图cart.blade.php中得到这个(deu,fra,gbr等)

在cart.blade.php中有这段代码可以得到我想要的东西:

<select name="country" id="pais">                      
    <option value="" selected>&lt;--- Choose Country ---&gt;</option>

       <?php foreach($final_countries_list as $key => $value){?>
        <option value="<?php echo $key?>"><?php echo $value. ' ('.$key.')';?></option>
        <?php } ?>
   </select>

我收到以下错误:

ErrorException(E_UNKNOWN) 数组到字符串的转换(查看:C:\ xampp \ htdocs \ my_web_name \ app \ views \ cart.blade.php)

我如何解决?

3 个答案:

答案 0 :(得分:3)

最简单的方法就是不要分配全部价值而只分配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);

答案 1 :(得分:3)

您应该使用$country['name']

附:
如果您使用刀片,则可以使用刀片助手短代码(例如@foreach)来简化代码。
考虑到这一点,您可以更简单地重写代码

&#13;
&#13;
<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>
&#13;
&#13;
&#13;

答案 2 :(得分:1)

问题是你正在迭代一个数组数组,但你正在将子数组视为一个字符串(为什么你会得到错误)。如果我理解正确,一个简单的改变可以得到你想要的东西:

<option value="<?php echo $key?>"><?php echo $value['name']. ' ('.$key.')';?></option>