Autor Zpráva
alfa47
Profil *
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 *
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
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;
- fungovalo by to úplně stejně, akorát hledání hodnoty v poli (in_array) pokaždé prochází celé pole, kdežto ověření existence klíče v poli (isset / array_key_exists) to nedělá. Takže pokud s tím polem použitých hodnot nepotřebuju dál pracovat, jsem zvyklá to psát takhle. Ale zase u varianty s in_array je na první pohled jasnější, co se tam děje.
alfa47
Profil *
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.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: