1

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?

1 Answer 1

2

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);
Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.