duannuan0074 2016-08-15 18:27
浏览 51

如何修复为foreach()提供的无效参数?

how can I fix my error of indexes on my json through foreach? by the way this is my json 1.

[  
   {  
      "id":"1",
      "sección":"Inventario",
      "data":[  
         {  
            "id":"11",
            "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png",
            "value":"Productos",
            "seccion_id":"1",
            "url":"http:\/\/localhost\/storeLTE\/inventario\/product"
         },
         {  
            "id":"14",
            "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png",
            "value":"Provedores",
            "seccion_id":"1",
            "url":"http:\/\/localhost\/storeLTE\/provedor\/provedor"
         }
      ]
   },
   {  
      "id":"2",
      "sección":"Compras",
      "data":[  
         {  
            "id":"22",
            "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png",
            "value":"Compras",
            "seccion_id":"2",
            "url":"http:\/\/localhost\/storeLTE\/compras\/compras"
         }
      ]
   }
]

I would like to know how can I Access my indexes to foreach and do it properly. because im getting invalid argument supplied for foreach()

controller

public function getModules($id_module) {
    if ($this->session->userdata('log')) {
        $data = $this->session->userdata('log');
        $menu = array();
        $seccions = $this->module->get_rows();
        foreach ($seccions as $index => $seccion){
            $modules = $this->module->query("SELECT CONCAT('".$seccion['id']."',storelte_modulo.id) AS id,CONCAT('".base_url('assets/img/sidebar')."','/',storelte_modulo.icon) as icon, storelte_modulo.modulo AS value,storelte_modulo.seccion_id,CONCAT('".base_url()."',storelte_modulo.url) AS  url FROM storelte_modulo INNER JOIN storelte_modulo_perfil ON  storelte_modulo_perfil.modulo_id = storelte_modulo.id WHERE seccion_id = $seccion[id] AND storelte_modulo_perfil.perfiles_id = $data[id] AND storelte_modulo_perfil.STATUS = 1");
            $seccions[$index]['data'] = $modules;
            if (!count($seccions[$index]['data'])) {
                unset($seccions[$index]);
            }
        }
        foreach ($seccions as $item) {
            array_push($menu,$item);
        }

        $this->json($menu);
    }

model

 public function get_rows() {
     $this->db->select('id,seccion');
     $this->db->from('storelte_seccion');

     return $this
         ->db
         ->get()
         ->result_array()
     ;
 }

 public function query($query){
     return $this
         ->db
         ->query($query)
         ->result_array()
     ;
 }

HTML

<div class="row">
<h3 class="text-center">Welcome to storeLTE, click a module below to get started!</h3>
<div class="home_module_list">
    <div class="module_item">
        <?php foreach ($seccions as $session) { ?>
          <div class="module_item" title="<?= $session['value'];?>">
            <a href="<?= $session['url']; ?>"><img src="<?= $session['icon']; ?>"/></a>
            <a href="<?= $session['url']; ?>"><?= $session['value']?></a>
        </div>
        <?php } ?>
    </div>
</div>
</div>
  • 写回答

1条回答 默认 最新

  • duanmao9918 2016-08-15 20:19
    关注

    You have the problem because $session in foreach ($seccions as $session) it is list, but not assoc array. You must use one more foreach for each element inside data. Here example:

    $json = '[  
       {  
          "id":"1",
          "sección":"Inventario",
          "data":[  
             {  
                "id":"11",
                "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/items.png",
                "value":"Productos",
                "seccion_id":"1",
                "url":"http:\/\/localhost\/storeLTE\/inventario\/product"
             },
             {  
                "id":"14",
                "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/employees.png",
                "value":"Provedores",
                "seccion_id":"1",
                "url":"http:\/\/localhost\/storeLTE\/provedor\/provedor"
             }
          ]
       },
       {  
          "id":"2",
          "sección":"Compras",
          "data":[  
             {  
                "id":"22",
                "icon":"http:\/\/localhost\/storeLTE\/assets\/img\/sidebar\/suppliers.png",
                "value":"Compras",
                "seccion_id":"2",
                "url":"http:\/\/localhost\/storeLTE\/compras\/compras"
             }
          ]
       }
    ]';
    
    $array = json_decode($json, true);
    
    foreach ($seccions as $section) {
        echo 'id = ' . $section['id'] . '<br/>';
        echo 'sección = ' . $section['sección'] . '<br/>';
        echo 'Data of sección:<br/>';
        // each array inside data - $seccions[0]['data'][0], $seccions[0]['data'][1] etc.
        foreach ($section['data'] as $dataItem) {
            echo 'data id = ' . $dataItem['id'] . '<br/>';
            echo 'data icon = ' . $dataItem['icon'] . '<br/>';
            echo 'data value = ' . $dataItem['value'] . '<br/>';
            echo 'data seccion_id = ' . $dataItem['seccion_id'] . '<br/>';
            echo 'data url = ' . $dataItem['url'] . '<br/>';
        }
    }
    

    Here example with your html:

    <div class="module_item">
        <?php foreach ($array as $session) : ?>
            <?php foreach ($session['data'] as $itemData) : ?>
                <div class="module_item" title="<?= $itemData['value'] ?>">
                    <a href="<?= $itemData['url'] ?>"><img src="<?= $itemData['icon'] ?>"/></a>
                    <a href="<?= $itemData['url'] ?>"><?= $itemData['value']?></a>
                </div>
            <?php endforeach ?>
        <?php endforeach ?>
    </div>
    

    Hope this helps you.

    评论

报告相同问题?

悬赏问题

  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了
  • ¥100 监控抖音用户作品更新可以微信公众号提醒
  • ¥15 UE5 如何可以不渲染HDRIBackdrop背景
  • ¥70 2048小游戏毕设项目
  • ¥20 mysql架构,按照姓名分表
  • ¥15 MATLAB实现区间[a,b]上的Gauss-Legendre积分