-2

I've a array of associative array

array(xxx) {
 [0]=>
   array(3) {
    ["group_id"]=>2
    ["contact"]=> "foo"
    ["contact_email"]=> "foo@gmail.com"
   }
 [1]=>
   array(3) {
    ["group_id"]=>2
    ["contact"]=> "bar"
    ["contact_email"]=> "bar@gmail.com"
   }
  [2]=>
   array(3) {
    ["group_id"]=>2
    ["contact"]=> "foobar"
    ["contact_email"]=> "bar@gmail.com"
   }
 [3]=>
   array(3) {
    ["group_id"]=>2
    ["contact"]=> "bar"
    ["contact_email"]=> "bar@gmail.com"
   }

to remove duplicate arrays I do this

array_unique( $array, SORT_REGULAR );

But now I would like to do something more specific by eliminating only the arrays that have duplicated key value (contact_email) to obtain this result

 array(xxx) {
 [0]=>
   array(3) {
    ["group_id"]=>2
    ["contact"]=> "foo"
    ["contact_email"]=> "foo@gmail.com"
   }
 [1]=>
   array(3) {
    ["group_id"]=>2
    ["contact"]=> "bar"
    ["contact_email"]=> "bar@gmail.com"
   }

How could i do that?
Thank you

Paolo Rossi
  • 2,490
  • 9
  • 43
  • 70

3 Answers3

4

Extract to an array and index by contact_email. Since there cannot be duplicate indexes you'll get the last occurrence:

$array = array_column($array, null, 'contact_email');

If you want to re-index that back to integers:

$array = array_values(array_column($array, null, 'contact_email'));
AbraCadaver
  • 78,200
  • 7
  • 66
  • 87
0

I think this can help

$arr = [['contact_email' => 'a@a.com'], ['contact_email' => 'a@a.com'], ['contact_email' => 'b@a.com']];
$result = [];
array_map(function ($item) use (&$result) {
    $result[$item['contact_email']] = $item;
}, $arr);
print_r($result);
potiev
  • 546
  • 2
  • 11
0

You can use foreach and group them by contact_email

$r = [];
foreach($a as $v){
 $r[$v['contact_email']] = $v;
}
print_r(array_values($r));// reorder index

Working example : https://3v4l.org/0oN8h

Rakesh Jakhar
  • 6,380
  • 2
  • 11
  • 20