2016-08-15 5 views
0

как я могу исправить свою ошибку индексов на моем json через foreach? кстати, это мой 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" 
     } 
     ] 
    } 
] 

Я хотел бы знать, как я могу получить доступ к моим индексам к каждому элементу и сделать это правильно. потому что им получать Недействительный аргумент для Еогеаспа()

контроллер

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

У вас есть проблема, потому что $session в foreach ($seccions as $session) это список, но не ассоциировать массив. Вы должны использовать еще один foreach для каждого элемента внутри data. Вот пример:

$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

ок. Я обновил ответ. Вы можете проверить это. –

Смежные вопросы