Autor | Zpráva | ||
---|---|---|---|
alfa47 Profil * |
#1 · Zasláno: 6. 10. 2013, 15:07:01
Ahojte,
neviem si dat rady s niecom nasledovnymi, mam dvojrozmerne pole: pole[0][0] = "slovo"; pole[0][1] = "a"; pole[1][0] = "ineslovo"; pole[1][1] = "b"; pole[2][0] = "slovo"; pole[2][1] = "c"; A ja by som potreboval spravit taky uniq pola, ze vo vsetkych pole[x][0] budem mat iba jedinecne nazvy, t.j. nebudu sa tam ziadne opakovat. Vedeli by ste mi prosim s tym pomoct? |
||
Tori Profil |
$nove = array_filter($puvodniPole, function($prvek) { static $pouzite = array(); if (isset($pouzite[$prvek[0]])) return false; $pouzite[$prvek[0]] = true; return true; }); // anebo stručnější zápis: $nove = array_filter($puvodniPole, function($prvek) { static $pouzite = array(); return isset($pouzite[$prvek[0]]) ? false : ($pouzite[$prvek[0]] = true); }); |
||
alfa47 Profil * |
#3 · Zasláno: 6. 10. 2013, 17:31:46
Tori:
dakujem velmi pekne!!! Vyzera ze to funguje, a vies mi prosim Ta v kratkosti povedat, ze co sa tam vlastne robi? Ja tomu kodu vobec nechapem... Vopred velka vdaka! |
||
Tori Profil |
#4 · Zasláno: 6. 10. 2013, 18:04:46
alfa47:
array_filter je funkce, která pro každý prvek pole (1.parametr) zavolá funkci, zadanou jakou 2.parametr, a podle její návratové hodnoty ten prvek buď z pole vyhodí, nebo ho tam nechá. Volaná funkce si ukládá všechna už použitá slova (do té statické proměnné $pouzite ). Při každém spuštění se podívá, jestli se to slovo ($prvek[0] ) už vyskytlo (pokud ještě ne, tak si ho uloží) a podle toho vrátí true/false.
Řádky 3-6 by mohly vypadat i takto: if (in_array($prvek[0], $pouzite)) return false; $pouzite[] = $prvek[0]; return true; |
||
alfa47 Profil * |
#5 · Zasláno: 6. 10. 2013, 19:27:09 · Upravil/a: alfa47
Tori:
Dakujem velmi krasne!!!! Naozaj mi to velmi pomohlo a vsetko mi je teraz jasne. Aj vdaka za to vysvetlenie in_array, je mi to uplne vsetko jasne. Este raz velka vdaka! Tori: Povodne by som to asi tiez riesil s tym in_array, ale to moje pole ma na 100.000 prvkov, takze kebyze to vzdy cele prechaza bolo by to velmi pomale. |
||
Časová prodleva: 11 let
|
0