2014-11-12 5 views
0

Допустим, у меня есть массив как это:Проверьте, существует ли такое же значение в многомерном массиве PHP

$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(
    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') 

);` 

Пожалуйста, помогите мне

Это моя попытка

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

пожалуйста, поделитесь, что вы пробовали, то мы можем помочь вам в том, что изменить с лучшим образом .... – Naincy

+0

просьба предоставить лучшее описание –

+0

I хотите удалить ключ из «основного массива», если значение из значения «значение» дублируется. – OsomA

ответ

2

Попробуйте так:

$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))); 
+0

Это прекрасно! – OsomA

+0

Это не нормально, потому что, когда у меня два значения равны, но имя другое не устраняет это! – OsomA

+0

Это необходимо для устранения повторяющегося массива, если вы хотите удалить дубликат со значением, а затем используйте array_filter http://php.net/manual/en/function.array-filter.php –

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

И если вы хотите сохранить все уникальные данные в одном массиве делают это следующим образом:

//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>'; 
} 
+0

Это не нормально :) – OsomA

+0

@OsomA, вы точно не сказали, что хотите, если есть одни и те же данные! – BSeitkazin

+0

Я хочу удалить ключ из основного массива, вы можете увидеть пример вверх! – OsomA

1

Попробуйте

$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); 
0
$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 
+0

, пожалуйста, добавьте некоторое объяснение того, что делает ваш код и как он решает проблему, это поможет другим в будущем. –

+0

Код не требует пояснений. Но он просто создает новый массив, опуская дубликаты, которые появляются позже. – guest

Смежные вопросы