【问题标题】:Iterate array with key Laravel使用键 Laravel 迭代数组
【发布时间】:2015-03-30 02:52:56
【问题描述】:

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

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

这是我的控制器代码:

 $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
}

等,等...

现在我想在视图 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>

我收到以下错误:

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

我该如何解决?

【问题讨论】:

    标签: php arrays laravel foreach key


    【解决方案1】:

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

    附言
    如果您使用刀片,您可以使用刀片助手短代码来简化代码
    (例如@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>

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • YEAHHH,它正盯着我看,我没看到
        • :) @lukasgeiter 还提出了一个应该可行的解决方案,尽管从您的问题中不清楚您是否需要在您的视图中的其他地方使用 'price' 键。如果没有,他的解决方案可能会更好。
        • 在我看来我不需要price,我在控制器中做所有事情
        猜你喜欢
        • 2019-05-11
        • 2018-10-19
        • 2017-07-30
        • 1970-01-01
        • 2011-10-30
        • 2012-02-22
        • 1970-01-01
        • 2017-02-09
        • 2019-02-26
        相关资源
        最近更新 更多