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 1186 korisnika na forumu :: 77 registrovanih, 4 sakrivenih i 1105 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 15694 - dana 01 Feb 2026 12:23

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 8u47, A.R.Chafee.Jr., Agape, Alooo, amaterSRB, Asteker, Avalon015, babaroga, bbogdan, berste23, Bojan198527, bojankrstc, Bombona, Botovac, BrcakRS, Buzdovan, ccoogg123, Cirkon, Clouseau, cuvarkuca, darkkran, ElGenius, FOX, Gaga_89, gajasvi, Georgius, Glauber, goxin, ILGromovnik, Ir, ivan_8282, Jakonjveliki, Jan, jarovitt, Jezekijel, JK, Jose, K-1A, Kamov, kybonacci, littlebunny, ludiagresivan, MaRtInsrbija1993, MB120mm, mikrimaus, milenko crazy north, milos.cbr, milutin134, mist-mist, Miškić, monomah, Mzee, nekdo, nikolapetkovic, Orc, pceklic, pedja.st, Pekman, Pilence, sabros, Sharpshooter, SIG SG550, Sin Boskic, SlaKoj, Solunac na steroidima, Sone1983, sony771, Srki98, sspp, suton, synergia, tm, tooooom, ulogovan, v82, Velički, 79693