Izbacivanje duplikata iz dvodimenzionalnog niza

Izbacivanje duplikata iz dvodimenzionalnog niza

offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Pokusao sam na ovaj nacin da izbacim duplikate

if (!in_array($rez[$c], $temp2)) {     $temp2[] = $rez[$c];     $c++; }  

Pocetni niz $rez i jednostavna provjera, da li se neki njegov clan nalazi u krajnjem nizu, ako ne onda ga ubaci u krajnji niz. Iz nekog razloga ovo nije radilo, pa sam rijesio na drugi, staromodni nacin:

    $c = 1; $temp3 = array();     while ($c<$el) { //$el je ukupan broj clanova niza     $d = 0;     $temp = $rez[$c]['id']; // jedinstveni id koji koristim za uporedjivanje     $ff = 0;      while ($d<$c) {       $temp2 = $temp3[$d]['id'];       if ($temp==$temp2) { $ff = 1;} // Nasao je id broj u novom nizu, postoji duplikat       $d++;       }      if ($ff!=1) {$temp3[]=$rez[$c];}      $c++;     }

Ali na nacin koji pri velikom broju clanova niza ima da uveliko optereti procesor, pa me interesuje imate li vi neki pametniji nacin, ili da li vidite gresku u prvobitnom kodu ?



Registruj se da bi učestvovao u diskusiji. Registrovanim korisnicima se NE prikazuju reklame unutar poruka.
offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] )
Searches haystack for needle using loose comparison unless strict is set.
4.2.0 needle may now be an array.

jeis probao sa array_unique — Removes duplicate values from an array
array array_unique ( array $array [, int $sort_flags = SORT_STRING ] )
Takes an input array and returns a new array without duplicate values.
[Link mogu videti samo ulogovani korisnici]
ima lepih funkcija samo treba citati dokumentaciju

slicno mozes postici sa array_flip — Exchanges all keys with their associated values in an array



offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

Array unique ne radi sa dvodimenzionalnim nizovima.

if (!in_array($rez[$c], $temp2)) {
$temp2[] = $rez[$c];
$c++;
}

I upravo i jesam koristio in_array, iz nekog razloga ne radi.

offline
  • Pridružio: 16 Jan 2010
  • Poruke: 241
  • Gde živiš: Zemun

A što ti sve te podatke koje upoređuješ ne staviš sve u novi niz i uporediš ih? Izbaciš višak, ostaviš sve što ti treba i upravljaš njima. Možda ja nisam najbolje razumeo tvoj problem, ali mi je ovo prvo palo na pamet.

offline
  • Pridružio: 15 Maj 2006
  • Poruke: 333
  • Gde živiš: Babušnica

in_array() je case-sensitive, možda tu dolazi do problema?

Mоžda da prilikom upisa elemenata u niz koristiš unique id kao index,
tipa
$niz['jedinstveni_id'] = 'neka vrednost';

offline
  • PHP Developer
  • Pridružio: 02 Okt 2005
  • Poruke: 546

On sa in_array uporedjuje 2 niza a lepo pise da od 4.2.0 to vise nemoze
4.2.0 needle may now be an array.

ono sto nije rekao je dali je $rez[$c] Array ili nesto drugo
i neznamo dali on hoce daizbaci duplikate tako sto gleda jedan pod niz ili sve

offline
  • C# and PHP Developer
  • Pridružio: 16 Feb 2011
  • Poruke: 1630
  • Gde živiš: Pancevo

lnenad ::Array unique ne radi sa dvodimenzionalnim nizovima..

Kako moze da neradi sa visedimenzionalnim nizovima?


<?php if( !function_exists( 'array_flat' ) ) {     function array_flat( $a, $s = array( ), $l = 0 )     {         # check if this is an array         if( !is_array( $a ) )                           return $s;                 # go through the array values         foreach( $a as $k => $v )         {             # check if the contained values are arrays             if( !is_array( $v ) )             {                 # store the value                 $s[ ]       = $v;                                 # move to the next node                 continue;                             }                         # increment depth level             $l++;                         # replace the content of stored values             $s              = array_flat( $v, $s, $l );                         # decrement depth level             $l--;                     }                 # get only unique values         if( $l == 0 ) $s = array_values( array_unique( $s ) );                 # return stored values         return $s;             } # end of function array_flat( ...     } ?>


Primer 2

function specified_array_unique($array, $value) {     $count = 0;         foreach($array as $array_key => $array_value)     {         if ( ($count > 0) && ($array_value == $value) )         {             unset($array[$array_key]);         }                 if ($array_value == $value) $count++;     }         return array_filter($array); }


Kao sto rece kolega MET samo malo prelistaj dokumentaciju svega.
A i ovo
Citat:
On sa in_array uporedjuje 2 niza a lepo pise da od 4.2.0 to vise nemoze
4.2.0 needle may now be an array.

offline
  • lnenad  Male
  • Stručni saradnik
    Web
  • Nenad
  • Arhitetak
  • Pridružio: 16 Jan 2007
  • Poruke: 2860
  • Gde živiš: Bijeljina

MSMarkoN ::in_array() je case-sensitive, možda tu dolazi do problema?

Mоžda da prilikom upisa elemenata u niz koristiš unique id kao index,
tipa
$niz['jedinstveni_id'] = 'neka vrednost';


Nije do toga jer ja ne petljam obradu podataka nego uporedjujem iste clanove niza.

@iKaC

U tom slucaju mi vraca jednodimenzionalni niz sto mi ne odgovara, zaboravio sam to da napisem u prvoj poruci.

@MeD

Ne znam tvoje znanje engelskog ali "4.2.0 needle may now be an array." tu pise da Od verzije 4.2.0 "igla" moze biti niz, a ne ne moze. Sta ne shvatas tu ?

@cvrle, upravo to i radim Smile

offline
  • Blood  Male
  • Ugledni građanin
  • Pridružio: 26 Jul 2003
  • Poruke: 384
  • Gde živiš: Beograd

A jesi li mozda probao sa array_merge?

Ko je trenutno na forumu
 

Ukupno su 1927 korisnika na forumu :: 90 registrovanih, 12 sakrivenih i 1825 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 20624 - dana 04 Apr 2026 04:18

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: aleksjevt, aleph_one, aramis s, Arsenije, Asparagus, bavar357, bobo85, Bosnjo, Colt D, DJUNTA, dnevnasoba, doktor1964, DonRumataEstorski, drimer, Dukelander, Dzigy, Džekson, esko_hz, FileFinder, Flanker-G, Giskard, goxsys, Goxy1, Haris, Helket, IpMan, IQ116, ivan1973, Kenanjoz, Kiki98TZ, Konda, kovinacc, krkalon, kxnydemigod, kybonacci, lcc, LostInSpaceandTime, Lux11, lyooba, M74AB3, m94j, Marko Marković, MaschinenPistole, mexo, Mi lao shu, micoboj, miki69, mikrimaus, Milometer, milos.cbr, minke, mino bosanac, Moldovan, moldway, Motocar, Natuzzi, nenad81, Neutral-M, nuke92, orjen, Paklenica, pein, Pewac21, Piani Jazzer, Pilence, PlayerOne, Prečanin30, S-lash, samsung, sekula80, Shinobi, sslay, steksi, Stoilkovic, suton, T55, Tas011, tecataki, TheDictator, Tila Painen, Vanderx, vathra, VJ, vlad84, vojnik švejk, vrgudinac, xAlex2, Yekaterinburg, zeka013, Zorge