0

I have a multi-dimensional array that contains an associative array in every row. How to make it unique based on specified array key?

I already tried some method like:

$cart = array_map("unserialize", array_unique(array_map("serialize", $cart)));

But failed to produce data as my expect my array structure look like:

Array
(
[0] => Array
 (
 [product_code] => prod3
 [qty] => 7
 )
[1] => Array
 (
 [product_code] => prod3
 [qty] => 1
 )
[2] => Array
 (
 [product_code] => prod4
 [qty] => 7
 )
[3] => Array
 (
 [product_code] => prod4
 [qty] => 7
 )
)

and I expect to get this result after using array array_unique() method. Just 2 records remaining:

Array
(
[1] => Array
 (
 [product_code] => prod3
 [qty] => 1
 )
[2] => Array
 (
 [product_code] => prod4
 [qty] => 7
 )
)
Alimin
  • 2,287
  • 6
  • 19
  • 31

1 Answers1

2

You can use array_column to convert the array into an associative array. Which will override duplicate values. Use array_values to convert the associative array into a simple array.

$arr = //Your array

$result = array_values(array_column( $arr , null, 'product_code' ));

print_r( $result );

This will result to:

Array
(
    [0] => Array
        (
            [product_code] => prod3
            [qty] => 1
        )

    [1] => Array
        (
            [product_code] => prod4
            [qty] => 7
        )

)

Doc: array_column(), array_values()

Eddie
  • 26,593
  • 6
  • 36
  • 58