Poslao: 04 Feb 2012 19:12
|
offline
- lnenad
- Stručni saradnik
Web
- 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.
|
|
Poslao: 04 Feb 2012 20:27
|
offline
- |_MeD_|
- Zaslužni građanin
- 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
|
|
|
|
Poslao: 04 Feb 2012 21:09
|
offline
- lnenad
- Stručni saradnik
Web
- 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.
|
|
|
|
Poslao: 05 Feb 2012 02:16
|
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.
|
|
|
|
Poslao: 05 Feb 2012 02:43
|
offline
- MSMarkoN
- Ugledni građanin
- 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';
|
|
|
|
Poslao: 05 Feb 2012 10:18
|
offline
- |_MeD_|
- Zaslužni građanin
- 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
|
|
|
|
Poslao: 05 Feb 2012 10:40
|
offline
- 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.
|
|
|
|
Poslao: 05 Feb 2012 10:51
|
offline
- lnenad
- Stručni saradnik
Web
- 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
|
|
|
|
|