2012-07-04 2 views
0

У меня есть следующие несколько мерного массива:Как удалить повторяющиеся значения для определенного ключа в многомерном массиве?

<?php 
$array = array(
array('first' => 1, 'second' => 1), 
array('first' => 1, 'second' => 1), 
array('first' => 2, 'second' => 1), 
array('first' => 3, 'second' => 1), 
array('first' => 3, 'second' => 1), 
array('first' => 3, 'second' => 1)); 

Как я могу удалить дубликаты first значения? Сохраняя дубликаты значений second.

После обработки массив должен быть:

array(
array('first' => 1, 'second' => 1), 
array('first' => 2, 'second' => 1), 
array('first' => 3, 'second' => 1)); 

См: http://codepad.org/tMh28KMf

+0

Можете ли вы привести пример с ключами, которые следует удалить, а некоторые из них не должны? С ожидаемым результатом, конечно! – Florent

+0

Я немного смущен тем, что вы ищете на выходе. Вы хотите '$ array = array (1,2,3,4,5,6);' или '$ array = array (array ('first' => 1), array ('first' => 2), array ('first' => 3)); '? – curtisdf

+0

Извините, я обновил свой ответ –

ответ

0

Вы должны будете сделать некоторые foreach петли и собрать массив самостоятельно. Проверьте также PHP array_unique().

+0

как я могу использовать это для моего примера? –

+0

Простите, я до сих пор не понимаю, что вам нужно. Вы также хотите отфильтровать дубликаты в клавишах «второй»? Это также может помочь узнать, для чего предназначен этот код. Там может быть лучший способ архитектовать его в целом. – curtisdf

+0

Хорошо, я вижу, что вы не хотите удалять дубликаты из последующих ключей после '' first''. Но ... что, если у вас есть некоторые «первые» дубликаты, но они различаются в последующих ключах «второй» или «третий»? – curtisdf

1

Код:

$array = array(
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
    array('first' => 3, 'second' => 1) 
); 

$temp = array(); 
$new = array(); 

foreach($array as $value) 
{ 
    if(!in_array($value['first'],$temp)) 
    { 
     $temp[] = $value['first']; 
     $new[] = $value; 
    } 
} 

Теперь $new содержит следующее:

array(
    array('first' => 1, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
); 
+0

спасибо, но как, если я также клавиши «второй» и «третий» - во втором и третьем я не удаляю дубликат –

+0

Обновленный ответ на основе вашего обновленного вопроса. – Anne

0

Это удаляет повторяющиеся массивы:

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

Ключи все еще то же самое, так что вы могли бы нужно исправить их.

+0

Мне бы хотелось удалить значения только из ключей «первым» - в моем массиве могут быть и ключи, например «второй» и «третий» - для этих ключей невозможно удалить дубликат –

+0

Это очень «неэлегантный» метод. – Leigh

0

, что если массив как этот

$array = array(
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 12), 
    array('first' => 2, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
    array('first' => 3, 'second' => 1) 
); 

$temp = array(); 
$new = array(); 

Вы хотите новый массив $ новый содержит следующее:

array(
    array('first' => 1, 'second' => 1), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
); 

или

array(
    array('first' => 1, 'second' => 1), 
    array('first' => 1, 'second' => 12), 
    array('first' => 2, 'second' => 1), 
    array('first' => 3, 'second' => 1), 
); 

?

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