phparrayscodeignitermultidimensional-arraymodel-view-controller

How to loop multiple result set payloads in a CodeIgniter view


I am trying to pass two result sets from separate queries executed within one model method to a view file.

In my controller, I am just printing the array by print_r($data) function to express the payload. I don't know how to loop this result in my view.

Array (
    [value] => Grocery 
    [products] => Array (
        [0] => Array (
            [query1] => Array (
                [0] => stdClass Object ( [parent_category] => Beverages )
                [1] => stdClass Object ( [parent_category] => Household )
            )
            [query2] => Array (
                [0] => stdClass Object ( [product_name] => Britannia Cake - Fruity Fun )
                [1] => stdClass Object ( [product_name] => Tetley Green Tea - Long Leaf )
                [2] => stdClass Object ( [product_name] => Tetley Green Tea - Lemon )
                [3] => stdClass Object ( [product_name] => AVT Gold Cup Premium Dust Tea )
                [4] => stdClass Object ( [product_name] => Brooke Bond Red Label Tea )
                [5] => stdClass Object ( [product_name] => sd sdsds s )
                [6] => stdClass Object ( [product_name] => sds dfcs )
                [7] => stdClass Object ( [product_name] => fhgg )
                [8] => stdClass Object ( [product_name] => hearts )
                [9] => stdClass Object ( [product_name] => banana )
                [10] => stdClass Object ( [product_name] => hearts )
            )
        )
    )
)

Model

$query3 = $this->db
    ->select('product_name')
    ->from('materials')
    ->where('category', $value)
    ->get();
$data = array();
if ($query3->num_rows() > 0) {
    //$data['category'] = $this->test($value,$location);
    $query4 = $this->db
        ->select('parent_category')
        ->distinct()
        ->from('materials')
        ->where('category', $value)
        ->where('warehouse_id', $location)
        ->group_by('parent_category')
        ->get();
    if ($query4->num_rows() > 0) {
        $data['query1'] = $query4->result();
    }
    $data['query2'] = $query3->result();
             
    return $data = array($data);
}

Controller

$data['value'] = $this->input->post('newparam');
$data['products'] = $this->Search_model->getItems($data['value'], $location);
print_r($data);

View

<table>
    <?php foreach ($query2 as $product){ ?>
        <tr>
            <td><?php echo $product->product_name?></td>
        </tr>
    <?php } ?>
</table>

Solution

  • Assuming your $products variable has the following data structure :

    [products] => Array ( 
                [0] => Array ( 
                        [query1] => Array ( 
                                [0] => stdClass Object ( [parent_category] => Beverages ) 
                                [1] => stdClass Object ( [parent_category] => Household ) ) 
                        [query2] => Array ( 
                                [0] => stdClass Object ( [product_name] => Britannia Cake - Fruity Fun ) 
                                [1] => stdClass Object ( [product_name] => Tetley Green Tea - Long Leaf ) 
                                [2] => stdClass Object ( [product_name] => Tetley Green Tea - Lemon ) 
                                [3] => stdClass Object ( [product_name] => AVT Gold Cup Premium Dust Tea ) 
                                [4] => stdClass Object ( [product_name] => Brooke Bond Red Label Tea ) 
                                [5] => stdClass Object ( [product_name] => sd sdsds s ) 
                                [6] => stdClass Object ( [product_name] => sds dfcs ) 
                                [7] => stdClass Object ( [product_name] => fhgg ) 
                                [8] => stdClass Object ( [product_name] => hearts ) 
                                [9] => stdClass Object ( [product_name] => banana ) 
                                [10] => stdClass Object ( [product_name] => hearts ) 
                        ) 
                ) 
            ) 
    

    Then to loop through the data in the query2 array, you could do :

    <?php foreach($products[0]['query2'] as $product) { ?>
        <tr>
            <td><?php echo $product->product_name;?></td>
        </tr>
    <?php } ?>