Autor Zpráva
Milkys
Profil
Zdravím všechny.
existuje nějaká funkce na seřazení pole na základě nejdelšího klíče (počítáno i včetně případných bílých znaků, mezer) se zachováním příslušné hodnoty?
Uvedu příklad:
$pole = array('sss' => 'wwww', 'xxxx' => 'qq', 'tt' => 'gggg');
Požadované pořadí:
$pole = array('xxxx' => 'qq', 'sss' => 'wwww', 'tt' => 'gggg');
Prvek s klíčem xxxx je první, protože má 4 znaky (je to nejdelší retězec) atd.
Děkuji za postrčení. Pokud se to již probíralo, prosím o odkaz - nenašel jsem.
Kajman
Profil
Mkněte na
uksort()

(Samo o sobě to neseřadí, ale můžete řazení předat vlastní funkci, která se bude rozhodovat podle délky řetězce.)
Milkys
Profil
Kajman:
Děkuji. Takže pomocí funkce spočítat počet znaků v řetězce v klíči a tu funkci použít v 2. parametru uksort(). Chápu to správně?


Jo, děkuji. toto funguje:
function strlen_uksort($a,$b) {
    return strlen($a)<strlen($b);
}
uksort($pole, "strlen_uksort");
Milkys
Profil
Přesnější je to s mb_strlen(). Vzhledem ke sčítání znaků s diakritikou.
function strlen_uksort($a,$b) {
    return mb_strlen($a, "UTF-8") < mb_strlen($b, "UTF-8");
}

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: