Skip to content
Advertisement

PHP Looping data from 3 table relation into each div element

I need help. I want to show div element in my Codeigniter PHP page from 3 table relations:

my Table is=

    Category =>category_id, category_name 
    Sub_Category => sub_category_id,category_id, sub_category_name  
    Item => item_id, sub_category_id,item_name

model =

public function item_data()
   {
   $query = $this->db->query('SELECT A.item_name, B.sub_category_name, C.category_name FROM 
   item A
   sub_kategori A 
   LEFT JOIN sub_category B ON B.sub_category_id = A.sub_category_id
   LEFT JOIN category C ON C.category_id = B.category_id
   ');
   return $query->result();
   }

Controller :

function item_view()
{
//--------
$item_data = $this->model_app->data_ticket();
$data['item_data'] = $item_data;

$this->load->view('template', $data);
}

View :

<?php $no = 0; foreach($item_data as $row) : $no++;?>
 <div class="card">           
   <div class="card-header">
     <h3 class=""><?php echo $row->sub_category_name;?></h3>
     <h5 class=""><?php echo $row->category_name;?></h5>
   </div>
   <div class="card-footer">
     <ul>

//... How to show/Looping item_name by sub_category_id ...?

       <li class="nav-item">
         <a href="#" class="nav-link">
           <?php echo $row->item_name;?>
         </a>
       </li>                                          
     </ul>
   </div>
 </div>
<?php endforeach;?>

Above code show repeated sub_category_name by item_name. output Now=

sub_category1 => category1=>item1
sub_category1 => category1=>item2
sub_category1 => category1=>item3

sub_category2 => category1=>item4
sub_category2 => category1=>item5
sub_category2 => category1=>item6
...

I want to get achieve data echo =

sub_category1 => category1=>item1,item2,item3
sub_category2 => category1=>item4,item5,item6
.....

Question: How to show/Looping item_name each by sub_category_id …?

Thank’s for help.

Advertisement

Answer

i assume the result of your query would be like:

Iphone Xr 64 GB|Iphone|Apple

Iphone XS 128 GB|Iphone|Apple

Airpod 2| Headphone|Apple

Airpod Pro| Headphone|Apple

Macbook air 2020 128Gb| laptop|Apple

So, if you want display group by sub category, you should restructure your data in model or controller, and don’t do it in the view, because nest php code and html code is very difficult to debug and reusable. to the structure like this:

[Note]: because the output of your query is stdclass, so let convert it to array, before using my code:

$arr = json_decode(json_encode($yourObject), TRUE);

['Iphone'=>
    [
        'category'=>'Apple',
        'items'=> ['Iphone Xr 64 GB','Iphone XS 128 GB']
    ]
]

i have some code for you to group list by sub_category

$arr = [
    ['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XR'],
    ['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XS'],
    ['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone X'],
    ['category'=>'Apple','sub_category'=>'HeadPhone','item'=>'AirPod 2'],
    ['category'=>'Apple','sub_category'=>'Laptop','item'=>'Macbook air'],
    ['category'=>'Samsung','sub_category'=>'MobilePhone','item'=>'Galaxy S10'],
];
$newArr = [];
foreach ($arr as $key => $item) {
    $newArr[$item['sub_category']][$key] = $item;
}

the result will be:

$newArr = [
    'Iphone'=>[
        ['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XR'],
        ['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone XS'],
        ['category'=>'Apple','sub_category'=>'Iphone','item'=>'Iphone X'],
    ],
    ...
];

the view should be:

<?php foreach($new_arr as $key => $value)?>
 <div class="card">           
   <div class="card-header">
     <h3 class=""><?php echo $key;?></h3>
     <h5 class=""><?php echo $value[0]['category'];?></h5>
   </div>
   <div class="card-footer">
     <ul>
       <?php foreach($value as $item) ?>
          <li class="nav-item">
             <a href="#" class="nav-link">
           <?php echo $item['item']?>
         </a>
       </li> 
       <?php endforeach;?>                                         
     </ul>
   </div>
 </div>
<?php endforeach;?>
User contributions licensed under: CC BY-SA
3 People found this is helpful
Advertisement