Reputation: 7520
I have a problem with my code. I am creating a function in my page that can get recommended products based in category. But my array is separated by category. What I want is to combine all products into a 1 big array. And I should validate if there's an existing ID.
So far here's what I have in my code: By the way I am using MVC approach.
MODEL
public function suggestProduct($category_id) {
$query = $this->db->query("SELECT product_id, category_id FROM " . DB_PREFIX . "product_to_category WHERE category_id = '" . (int)$category_id . "'");
$get_products = $query->rows;
$products = array();
foreach($get_products as $product) {
//echo $product['product_id']."<br />";
if(!in_array($product['product_id'], $products)) {
$products[] = $this->getProduct($product['product_id']);
}
}
return $products;
}
I used the in_array function to remove the duplicate ID.
CONTROLLER
$data['recommended_products'] = array();
foreach($get_categories as $category) {
$data['recommended_products'][] = $this->model_catalog_product->suggestProduct($category);
}
fp($data['recommended_products']); //PRINT OUTPUT
And in my output I have this.
Array
(
[0] => Array
(
[0] => Array
(
[product_id] => 41
[category_id] => 27
)
)
[1] => Array
(
[0] => Array
(
[product_id] => 28
[category_id] => 20
)
[1] => Array
(
[product_id] => 29
[category_id] => 20
)
[2] => Array
(
[product_id] => 30
[category_id] => 20
)
[3] => Array
(
[product_id] => 33
[category_id] => 20
)
[4] => Array
(
[product_id] => 35
[category_id] => 20
)
[5] => Array
(
[product_id] => 40
[category_id] => 20
)
[6] => Array
(
[product_id] => 42
[category_id] => 20
)
[7] => Array
(
[product_id] => 43
[category_id] => 20
)
[8] => Array
(
[product_id] => 44
[category_id] => 20
)
[9] => Array
(
[product_id] => 46
[category_id] => 20
)
[10] => Array
(
[product_id] => 47
[category_id] => 20
)
[11] => Array
(
[product_id] => 48
[category_id] => 20
)
)
[2] => Array
(
[0] => Array
(
[product_id] => 43
[category_id] => 18
)
[1] => Array
(
[product_id] => 44
[category_id] => 18
)
[2] => Array
(
[product_id] => 45
[category_id] => 18
)
[3] => Array
(
[product_id] => 46
[category_id] => 18
)
[4] => Array
(
[product_id] => 47
[category_id] => 18
)
)
)
But my in_array function has only effect in the present array. How can I perform the validation in all arrays?
Upvotes: 1
Views: 86
Reputation: 41885
Since $get_categories
is a collection of ids, then you could just use a IN
clause instead:
public function suggestProduct($category_id)
{
$category_ids = implode(',', array_unique($category_id));
$query = $this->db->query("
SELECT product_id, category_id FROM " . DB_PREFIX . "product_to_category
WHERE category_id IN($category_ids)
");
$get_products = $query->rows;
$products = array();
foreach($get_products as $product) {
//echo $product['product_id']."<br />";
if(!in_array($product['product_id'], $products)) {
$products[] = $this->getProduct($product['product_id']);
}
}
return $products;
}
Then inside the controller:
$data['recommended_products'] = $this->model_catalog_product->suggestProduct($get_categories);
Upvotes: 2