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.
http://www.php.net/manual/en/function.array-unique.php
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 1133 korisnika na forumu :: 34 registrovanih, 4 sakrivenih i 1095 gosta   ::   [ Administrator ] [ Supermoderator ] [ Moderator ] :: Detaljnije

Najviše korisnika na forumu ikad bilo je 3466 - dana 01 Jun 2021 17:07

Korisnici koji su trenutno na forumu:
Korisnici trenutno na forumu: 357magnum, _Rade, A.R.Chafee.Jr., Ben Roj, BlekMen, bokisha253, Dimitrije Paunovic, Dogma21, Dorcolac, dozorni, draganca, GhostOfSparta480, Kubovac, KUZMAR, ladro, Libertas, LUDI, marera, Mercury, Milan A. Nikolic, milenko crazy north, Milometer, MiroslavD, mkukoleca, mnn2, Primus17, proka89, RED4G-304, robertino, styg, VJ, wizzardone, Zoca, 2001