4

I want to combine two arrays from two separate queries. I stored my products in two separate tables: one for general information like name, description, price, etc; and another for their various details i.e. a clothing items size and colour.

So my database is structured like this for products:

products table:
p_id | title | descr | etc

product_attrs table:
attr_id | products.p_id | name | value

where name and value can be name = Size value = Large

If I trying getting all the details for a product out in one query, like this:

this->db->select('products.title,
                           p.description,
                           p.price,
                           p.stock,
                           p.name,
                           p.value');
        $this->db->from('p');
        $this->db->where('p.p_id', $id);
        $this->db->join('product_attrs', 'product_attrs.product_id = p.p_id', 'inner');
        $result = $this->db->get();

        return $result->result_array();

I get an array populated with the number of name/value pairs there are in the table product_attributes for that product. So if there are say 5 attributes of a product, I would get everything back 5 times like this:

Array ( [0] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => Brand [value] => Modestly Active Swimwear ) [1] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => Colour [value] => Black and Light Blue ) [2] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => size [value] => small ) [3] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => size [value] => medium ) [4] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 [name] => size [value] => large ) )

So I decided to separate the queries for each table, so that I can get one result set each. But I want to combine them both so that I can return the data back as one array to the Controller and display that onto my view. This is how I've queried the two tables, I just need a way to combine the results for both:

$this->db->select('p.title,
                           p.description,
                           p.price,
                           p.stock');
        $this->db->from('p');
        $this->db->where('p_id', $id);
        $result = $this->db->get();

        $this->db->select('name, value');
        $this->db->from('product_attrs');
        $this->db->where('p_id', $id);
        $result2 = $this->db->get();

If someone could please help I'd greatly appreciate it. Thank you

EDIT:

I'm looking at array_merge() function right now in php.net, but if I do this:

$result = $this->db->get();
        $array1 = $result->result_array();

$result2 = $this->db->get();
        $array2 = $result2->result_array();
        $data = array_merge($array1,$array2);
        return $data;

I get more than one array:

Array ( [0] => Array ( [title] => Modest Swimsuit - Full body [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant [price] => 59.95 [stock] => 20 ) [1] => Array ( [name] => Brand [value] => Modestly Active Swimwear ) [2] => Array ( [name] => Colour [value] => Black and Light Blue ) [3] => Array ( [name] => size [value] => small ) [4] => Array ( [name] => size [value] => medium ) [5] => Array ( [name] => size [value] => large ) )

Is there a way to get the values out of the above array in my view?

4

1 回答 1

2

另一种选择是遍历第二个结果数组并将值添加到第一个数组。

    // Get products results as an array
    $this->db->select('products.title,
                       products.description,
                       products.price,
                       products.stock');
    $this->db->from('products');
    $this->db->where('product_id', $id);
    $product = $this->db->get()->result_array();

    // Get product attributes as an array
    $this->db->select('name, value');
    $this->db->from('product_attributes');
    $this->db->where('product_id', $id);
    $product_attributes = $this->db->get()->result_array();

    // Loop through the results
    foreach($product_attributes as $attribute) {

         // Add results to original product array
         $product[$attribute['name']] = $attribute['value'];
    }

这应该产生一个像这样的数组:

        [title]       => Modest Swimsuit - Full body 
        [description] => UV +50 Protection - Chlorine Resistant - Water Resistant - Quick Drying - Maximum Breathe Ability- Sea Water Resistant 
        [price]       => 59.95 
        [stock]       => 20
        [Brand]       => Modestly Active Swimwear 
        [Colour]      => Black and Light Blue
        [size]        => small
于 2013-03-01T01:43:43.953 回答