Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Usuwanie duplikatów w tablicy
Forum PHP.pl > Forum > PHP
sebekzosw
Mam taką tablicę:

Kod
Array
(
    [0] => Array
        (
            [id] => 155199
            [tresc] => Wesołych Świąt
        )

    [1] => Array
        (
            [id] => 155199
            [tresc] =>  Wesołych Świąt
        )
    
    [2] => Array
        (
            [id] => 4244
            [tresc] =>  Nowy Rok
        )
    
    [3] => Array
        (
            [id] => 4244
            [tresc] =>  Nowy Rok
        )
)


I jak usunąć duplikaty pod względem id czyli mam tablice z 50 elementami, a w niej mam 5 elementów o id 4244, to jak zrobić, aby został 1 ?
Blame
array_unique
sebekzosw
myślicie, że nie próbowałem array_unique ? próbowałem:

  1. echo count($tablica)."<br />";
  2. $wynik = array_unique($tablica);
  3. echo count($wynik);


I za każdym razem usuwało mi wszystko, więc zostawał mi tylko 1 element ;|
wookieb
Cierpliwość: smile.gif Jest jeszcze coś takiego jak komentarze, nikt przecież nie powiedział, że masz użyc array_unique hehe tongue.gif
http://pl2.php.net/manual/pl/function.array-unique.php#60323
crackcomm
Kod
<?php
$arr = array();

$arr[0]['id']      = '155199';
$arr[0]['tresc'] = 'Wesołych Świąt';
$arr[1]['id']      = '155199';
$arr[1]['tresc'] = 'Wesołych Świąt';
$arr[2]['id']      = '4244';
$arr[2]['tresc'] = 'Nowy Rok';
$arr[3]['id']     = '4244';
$arr[3]['tresc'] = 'Nowy Rok';

foreach( $arr as $key => $val ) {
    $arr[$key] = serialize($val);
}


$arr = array_unique($arr);

foreach( $arr as $key => $val ) {
    $arr[$key] = unserialize($val);
}

print_r($arr);

?>


8_pasazer_NOSTROMO
Odświeżam wątek. Mam nieco inny problem


$wykonaj = mysql_query("SELECT * FROM osoby WHERE cos tam cos tam") or die ("Błąd w łączeniu");
while($wiersz = mysql_fetch_array($wykonaj))
{
$num[]=$wiersz['num'];
$imie[]=$wiersz['im1'];
$nazw[]=$wiersz['nazw'];
$pesel[]=$wiersz['pesel'];
$ur[]=$wiersz['ur'];
$syn[]=$wiersz['syn'];
$miej[]=$wiersz['miej'];
$ul[]=$wiersz['ul'];
$dom[]=$wiersz['dom'];
$co[]=$wiersz['co'];};
}

Chciałbym wyrzucić z wszystkich tablic te wartosci, dla których w tablicy $num[] wystąpił dubel.

Przykładowo :

$num[0]='222';
$num[1]='992';
$num[2]='222';


$num[2] jest zdublowany wiec we wszystkich tablicach wyrzucić tą wartość w pozycji [2]


Kto podpowie jak to zrobić. Nie mam bladego pojęcia.

nospor
Po prostu przy wrzucaniu sprawdzaj czy juz jest czy nie...
  1. while($wiersz = mysql_fetch_array($wykonaj))
  2. {
  3. if (in_array($wiersz['num'], $num))
  4. continue;
  5.  
  6. $num[]=$wiersz['num'];
  7. $imie[]=$wiersz['im1'];
  8. $nazw[]=$wiersz['nazw'];
  9. $pesel[]=$wiersz['pesel'];
  10. $ur[]=$wiersz['ur'];
  11. $syn[]=$wiersz['syn'];
  12. $miej[]=$wiersz['miej'];
  13. $ul[]=$wiersz['ul'];
  14. $dom[]=$wiersz['dom'];
  15. $co[]=$wiersz['co'];};
  16. }

i juz
8_pasazer_NOSTROMO
@ nospor

Dzięki wielkie, ale mam prośbę. Czy mógłbyś mi napisać co właściwie zrobiłeś ?
Chciałbym wiedzieć co to oznacz niż tylko gotowy kod, wtedy lepiej zrozumiem problem.
nospor
Jedyne co dopisałem to to:
if (in_array($wiersz['num'], $num))
continue;
no bez żartów, że muszę ci to tłumaczyć... zajrzyj do manuala jak nie wiesz co robi in_array lub continue


A co robi dokładnie ten kod to ci przecież napisałem:
Cytat
Po prostu przy wrzucaniu sprawdzaj czy juz jest czy nie...
Czyli moj kod sprawdza czy jest już wartosc w tablicy czy nie...
8_pasazer_NOSTROMO
Wywaliło mi
Warning: in_array() expects parameter 2 to be array, null given in
nospor
Bo najwyrażniej nigdzie nie powiedziałes, że $num jest tablicą...

Przed pętlą daj:
$num = array();
8_pasazer_NOSTROMO
@ nospor
Jesteś Wielki, mała rzecz a cieszy jak Vasco Da Gama gdy zbliżał się do Indii.

Nie będę klikał pomógł bo i tak masz rekord nie do pobicia jak Jane Ahonen w 2005 w Willingen. :-)


@aras785
array_unique to zły pomysł. Jedną tablicę można "od-dublować" ale co z pozostałymi ?
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.