Jerielle
Jerielle

Reputation: 7520

How to combine and remove duplicate array value using PHP?

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

Answers (1)

Kevin
Kevin

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

Related Questions