2010-05-18 3 views
4

Мне было интересно, может ли кто-нибудь помочь мне, я пытаюсь найти скрипт, который будет проверять весь мой массив и удалять любые дубликаты, если потребуется, а затем выплюнуть массив в том же формате.php удалить дубликаты из массива

Вот пример моего массива (как вы увидите, есть некоторые дубликаты):

Array 
(
    [0] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 34 
        [name] => Adrianos Pizza & Pasta 
        [imageurl] => sp_adrian.gif 
        [clickurl] => # 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 42 
        [name] => Ray White Mordialloc 
        [imageurl] => sp_raywhite.gif 
        [clickurl] => http://www.raywhite.com/ 
       ) 

      [2] => stdClass Object 
       (
        [bid] => 48 
        [name] => Beachside Osteo 
        [imageurl] => sp_beachside.gif 
        [clickurl] => http://www.beachsideosteo.com.au/ 
       ) 

      [3] => stdClass Object 
       (
        [bid] => 57 
        [name] => Southern Suburbs Physiotherapy Centre 
        [imageurl] => sp_sspc.jpg 
        [clickurl] => http://www.sspc.com.au 
       ) 

      [4] => stdClass Object 
       (
        [bid] => 52 
        [name] => Mordialloc Travel and Cruise 
        [imageurl] => sp_morditravel.jpg 
        [clickurl] => http://www.yellowpages.com.au/vic/mordialloc/mordialloc-travel-cruise-13492525-listing.html 
       ) 

      [5] => stdClass Object 
       (
        [bid] => 37 
        [name] => Mordialloc Cellar Door 
        [imageurl] => sp_cellardoor.gif 
        [clickurl] => 
       ) 

      [6] => stdClass Object 
       (
        [bid] => 53 
        [name] => Carmotive 
        [imageurl] => sp_carmotive.jpg 
        [clickurl] => http://www.carmotive.com.au/ 
       ) 

     ) 

    [1] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 55 
        [name] => 360South 
        [imageurl] => sp_360.jpg 
        [clickurl] => 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 40 
        [name] => Ripponlea Mitsubishi 
        [imageurl] => sp_mitsubishi.gif 
        [clickurl] => 
       ) 

      [2] => stdClass Object 
       (
        [bid] => 57 
        [name] => Southern Suburbs Physiotherapy Centre 
        [imageurl] => sp_sspc.jpg 
        [clickurl] => http://www.sspc.com.au 
       ) 

      [3] => stdClass Object 
       (
        [bid] => 52 
        [name] => Mordialloc Travel and Cruise 
        [imageurl] => sp_morditravel.jpg 
        [clickurl] => http://www.yellowpages.com.au/vic/mordialloc/mordialloc-travel-cruise-13492525-listing.html 
       ) 

      [4] => stdClass Object 
       (
        [bid] => 37 
        [name] => Mordialloc Cellar Door 
        [imageurl] => sp_cellardoor.gif 
        [clickurl] => 
       ) 

      [5] => stdClass Object 
       (
        [bid] => 53 
        [name] => Carmotive 
        [imageurl] => sp_carmotive.jpg 
        [clickurl] => http://www.carmotive.com.au/ 
       ) 

     ) 

    [2] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 44 
        [name] => Mordialloc Personal Trainers 
        [imageurl] => sp_mordipt.gif 
        [clickurl] => # 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 36 
        [name] => Big River 
        [imageurl] => sp_bigriver.gif 
        [clickurl] => 
       ) 

      [2] => stdClass Object 
       (
        [bid] => 52 
        [name] => Mordialloc Travel and Cruise 
        [imageurl] => sp_morditravel.jpg 
        [clickurl] => http://www.yellowpages.com.au/vic/mordialloc/mordialloc-travel-cruise-13492525-listing.html 
       ) 

      [3] => stdClass Object 
       (
        [bid] => 37 
        [name] => Mordialloc Cellar Door 
        [imageurl] => sp_cellardoor.gif 
        [clickurl] => 
       ) 

      [4] => stdClass Object 
       (
        [bid] => 53 
        [name] => Carmotive 
        [imageurl] => sp_carmotive.jpg 
        [clickurl] => http://www.carmotive.com.au/ 
       ) 

     ) 

    [3] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 41 
        [name] => Print House Graphics 
        [imageurl] => sp_printhouse.gif 
        [clickurl] => 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 49 
        [name] => Kim Reed Conveyancing 
        [imageurl] => sp_kimreed.jpg 
        [clickurl] => 
       ) 

      [2] => stdClass Object 
       (
        [bid] => 37 
        [name] => Mordialloc Cellar Door 
        [imageurl] => sp_cellardoor.gif 
        [clickurl] => 
       ) 

      [3] => stdClass Object 
       (
        [bid] => 53 
        [name] => Carmotive 
        [imageurl] => sp_carmotive.jpg 
        [clickurl] => http://www.carmotive.com.au/ 
       ) 

     ) 

    [4] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 38 
        [name] => Lowe Financial Group 
        [imageurl] => sp_lowe.gif 
        [clickurl] => http://lowefinancial.com/ 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 58 
        [name] => Dicount Lollie Shop 
        [imageurl] => new dls logo.jpg 
        [clickurl] => 
       ) 

      [2] => stdClass Object 
       (
        [bid] => 53 
        [name] => Carmotive 
        [imageurl] => sp_carmotive.jpg 
        [clickurl] => http://www.carmotive.com.au/ 
       ) 

     ) 

    [5] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 45 
        [name] => Mordialloc Sporting Club 
        [imageurl] => msc logo.jpg 
        [clickurl] => 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 33 
        [name] => Two Brothers 
        [imageurl] => sp_2brothers.gif 
        [clickurl] => http://www.2brothers.com.au/ 
       ) 

     ) 

    [6] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 46 
        [name] => Patterson Securities 
        [imageurl] => cmyk patersons_withtag.jpg 
        [clickurl] => 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 56 
        [name] => Logical Services 
        [imageurl] => sp_logical.jpg 
        [clickurl] => 
       ) 

     ) 

    [7] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 59 
        [name] => Pure Sport 
        [imageurl] => sp_psport.jpg 
        [clickurl] => http://www.puresport.com.au/ 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 51 
        [name] => Richmond and Bennison 
        [imageurl] => sp_richmond.jpg 
        [clickurl] => http://www.richbenn.com.au/ 
       ) 

     ) 

    [8] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 39 
        [name] => Main Street Mordialloc 
        [imageurl] => main street cafe.jpg 
        [clickurl] => 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 50 
        [name] => Letec 
        [imageurl] => sp_letec.jpg 
        [clickurl] => www.letec.biz 
       ) 

     ) 

    [9] => Array 
     (
      [0] => stdClass Object 
       (
        [bid] => 54 
        [name] => PPM Builders 
        [imageurl] => sp_ppm.jpg 
        [clickurl] => http://www.hotfrog.com.au/Companies/P-P-M-Builders 
       ) 

      [1] => stdClass Object 
       (
        [bid] => 43 
        [name] => Systema 
        [imageurl] => sp_systema.gif 
        [clickurl] => 
       ) 

     ) 

) 
+1

У вас много вложенных массивов. Какие дубликаты вы имеете в виду? Например. первый подмассив содержит объект с идентификатором '57'. Означает ли это, что этот объект должен быть удален во втором (и все далее) подмассиве? –

+1

* Возможно дублировать *: http://stackoverflow.com/questions/307674/how-to-remove-duplicate-values-from-a-multi-dimensional-array-in-php –

+0

Да, это то, что я после .. Я знаю, что это многомерное, но если есть дубликат чего-либо из любого из подмассивов, он должен быть удален :) – SoulieBaby

ответ

2

Используйте функцию array_unique.

Здесь приведено описание многомерной функции array_unique.

function super_unique($array) 
{ 
    $result = array_map("unserialize", array_unique(array_map("serialize", $array))); 

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

    return $result; 
} 

Не проверено, из комментариев в руководстве по функциям.

+0

Я пробовал это, но он все еще показывает дубликаты – SoulieBaby

+0

+1, однако это кажется ужасно знакомым (http://stackoverflow.com/questions/1247950/how-to-remove-duplicated-2 -dimension-array-in-php/1248189 # 1248189) ... xP –

+1

Вам нужно передать объекты в массивы и использовать 'array_merge'. –

5

Вы можете удалить дубликаты из массива, выполнив:

$array = array_values(array_unique($array)); 
+2

Это работает для многомерных массивов? Я так не думаю ... –

0

My РНР ржавый, но что-то, как это должно работать:

function makeUniqueBidArray(&$array) 
{ 
    $tempArray = array(); 
    foreach($array as $bidArray) { 
    foreach($bidArray as $bid) { 
     if (isset($tempArray[$bid->bid]) { 
     unset($bid); 
     } else { 
     $tempArray[$bid->bid] = $bid->name; 
     } 
    } 
    } 
} 
0

остановка, используя свою собственную функцию массива расщепление, которое вызывает дубликаты и читайте страницу Руководство по PHP на array_chunk

3

Попробуйте это, он работает с большие массивы:

$original = array('one', 'two', 'three', 'four', 'five', 'two', 'four'); 
$filtered = array(); 
foreach ($original as $key => $value){ 
    if(in_array($value, $filtered)){ 
     continue; 
    } 
    array_push($filtered, $value); 
} 

print_r($filtered); 

Выходы:

Array 
(
    [0] => one 
    [1] => two 
    [2] => three 
    [3] => four 
    [4] => five 
) 
+0

3 лет спустя, и это помогло мне с блоком писателя-кодера. –

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