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>
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.