многомерный массив php удаляет дубликат

Bitstream Vera без моно. [ http://www.dafont.com/bitstream-vera-mono.font]

19
задан Kevin Carmody 7 December 2009 в 17:49
поделиться

3 ответа

Быстрое решение, использующее уникальность индексов массива:

$newArr = array();
foreach ($array as $val) {
    $newArr[$val[2]] = $val;    
}
$array = array_values($newArr);

Примечание 1: Как видно из выше, последнее совпадение адреса электронной почты используется вместо первого. Это можно изменить, заменив вторую строку на

foreach (array_reverse($array) as $val) {

Примечание 2: индексы в результирующем массиве несколько перепутаны. Но я думаю, это не имеет значения ...

28
ответ дан 30 November 2019 в 02:27
поделиться

В комментариях пользователей для array_unique () есть несколько решений этой проблемы. Например,

  функция multi_unique ($ array) {
 foreach ($ массив как $ k => $ na)
 $ new [$ k] = сериализовать ($ na);
 $ uniq = array_unique ($ новый);
 foreach ($ uniq как $ k => $ ser)
 $ new1 [$ k] = десериализовать ($ ser);
 возврат ($ new1);
 } 

из http://uk.php.net/manual/en/function.array-unique.php#57202 .

8
ответ дан 30 November 2019 в 02:27
поделиться
$array = array(
    array('dave','jones','c@b.c'),
    array('dave','jones','a@c.d'),
    array('dave','jones','c@b.c'),
    array('dave','jones','e@v.d'),
    array('dave','jones','a@c.d')   
);

$copy = $array; // create copy to delete dups from
$usedEmails = array(); // used emails

for( $i=0; $i<count($array); $i++ ) {

    if ( in_array( $array[$i][2], $usedEmails ) ) {
        unset($copy[$i]);
    }
    else {
        $usedEmails[] = $array[$i][2];
    }

}

print_r($copy);
3
ответ дан 30 November 2019 в 02:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: