2016-08-15 3 views
0

foreachを使用して自分のjsonでインデックスのエラーを修正する方法はありますか?ところで、これは私のjsonです。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にインデックスにアクセスして正しく行うことができます。 $sessionforeach ($seccions as $session)で、それはリストであるので、イムは、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

を得るので、あなたは、問題を抱えていますassoc配列ではありません。 dataの各要素に1つ以上の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

でそれをしたいと思います。私は答えを更新しました。それを確認することができます。 –

関連する問題