OsomA
OsomA

Reputation: 147

Check if exists the same value in multidimensional array PHP

Let's say i have an array like this:

$array = array(
  0 => 
    array (
      'value' =>  '1' ,
      'name' =>  'dasdfa sadfa' ),

   1=> Array (
      'value' =>  '[email protected]' ,
      'name' =>  'd2' ),
  21 => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'name1`' ),

  23 => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'POPESCU CATALINA' ),
  24 => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'POPESCU CATALINA' ),

  26 => 
    array(
      'value' =>  '[email protected]',
      'name' =>  '43414 Test01'),
  27 => 
    array(
      'value' =>  '[email protected]',
      'name' =>  'oct oct' )

);

I want to know if exists duplicated value in array with key 'value' I know how to do this if i want a specified value but general no. The result must be an array with no duplicated values(eg:

    $array = array(
  0 => 
    array (
      'value' =>  '1' ,
      'name' =>  'dasdfa sadfa' ),

   1=> Array (
      'value' =>  '[email protected]' ,
      'name' =>  'd2' ),

  23 => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'POPESCU CATALINA' ),

  26 => 
    array(
      'value' =>  '[email protected]',
      'name' =>  '43414 Test01'),
  27 => 
    array(
      'value' =>  '[email protected]',
      'name' =>  'oct oct' )

);`

Please help me.

This is my try

function has_dupes($array){
 $dupe_array = array();
 foreach($array as $val){
  if(++$dupe_array[$val] > 1){
   return true;
  }
 }
 return false;
}

Upvotes: 0

Views: 1650

Answers (4)

vanarajcs
vanarajcs

Reputation: 978

Try this

$values = array_map("unserialize", array_unique(array_map("serialize", $array)));

foreach ($values as $key => $value)
  {
    if ( is_array($value) )
    {
       $values[$key] = $value;
    }
  }

print_r($values);

Upvotes: 1

guest
guest

Reputation: 1

$unique_data = array(); // the result array
$duplicate_data = array();

$seen = array();
foreach ($array as $key => $arr) {
    $value = $arr['value'];
    if (!isset($seen[$value])) {
        $seen[$value] = '';
        $unique_data[$key] = $arr;
    } else {
        $duplicate_data[$key] = $arr; // optional
    }
}
unset($seen); // optional in function scope

Upvotes: 0

BSeitkazin
BSeitkazin

Reputation: 3059

$result = array_unique($array);
print_r($result);

And if you want to store all unique data in one array do it like this:

//declare $array
$unique_array = array();
foreach ($array as  $key => $type) {
    foreach($type as $vale => $name) {
        if ($vale == 'value') {
            //echo $name . '<br>';
            array_push($unique_array, $name);
        }
    }
}
$result = array_unique($unique_array);
foreach ($result as $res) {
    echo $res . '<br>';
}

Upvotes: 1

Ashique C M
Ashique C M

Reputation: 683

Try this way:

    $array = array(
  '0' => 
    array (
      'value' =>  '1' ,
      'name' =>  'dasdfa sadfa' ),

   '1'=> Array (
      'value' =>  '[email protected]' ,
      'name' =>  'd2' ),
  '21' => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'name1`' ),

  '23' => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'POPESCU CATALINA' ),
  '24' => 
    array(
      'value' =>  '[email protected]' ,
      'name' =>  'POPESCU CATALINA' ),

  '26' => 
    array(
      'value' =>  '[email protected]',
      'name' =>  '43414 Test01'),
  '27' => 
    array(
      'value' =>  '[email protected]',
      'name' =>  'oct oct' )

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

Upvotes: 2

Related Questions