2016-08-15 17 views
0

如何通過foreach修復我的json索引錯誤?順便說一下,這是我的JSON 1如何修復爲foreach()提供的無效參數?

[ 
    { 
     "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" 
     } 
     ] 
    } 
] 

我想知道我怎麼可以訪問我的索引的foreach和做正確。因爲即時得到提供的foreach無效參數()

控制器

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); 
    } 

模型

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> 
+0

通過顯示實際運行的腳本讓我們更輕鬆。你只是顯示一些函數定義,但沒有執行指令。你稱這些功能?哪裏?有哪些爭論?以及JSON如何適應所有這些?你提到了foreach的一個問題,但是你的代碼中有幾個foreach循環,你指的是哪一個?讓它很容易幫助你 – BeetleJuice

回答

0

您,是因爲在foreach ($seccions as $session)$session它是列表中的問題,但不是數組。對於data內的每個元素,您必須再使用一個foreach。這裏例如:

$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/>'; 
    } 
} 

這裏例如與您的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> 

希望這有助於你。

+0

我怎樣才能用我的代碼示例?我不明白第一個。我想用json – azdejo

+0

確定。我更新了答案。你可以檢查它。 –