Autor | Zpráva | ||
---|---|---|---|
host Profil * |
#1 · Zasláno: 4. 6. 2008, 12:46:07
Zdravím, mám zhruba takovéto pole:
Array( 'i0' => Array(), 'i1' => Array(), 'i2' => Array(), .... 'i15' = Array() ) nemám ho takhle pěkně porovnané ale klíče jsou přeházené. Chtěl jsem to setřídit pomocí ksort(), jenže zrada: pole se mi nesetřídí jako i0, i1, i2, i3, ....i9, i10, i11, ..., ale jako i0,i1, i10, i11, ..., i2, i3. Pokud by byly klíče běžná čísla, tak by si s tím poradil sort_flag. Jenže když před tím mám "i", tak to prostě nejde. Nevíte někdo, jak to elegantně setřídit? |
||
ninja Profil |
#2 · Zasláno: 4. 6. 2008, 12:57:12
|
||
host Profil * |
#3 · Zasláno: 4. 6. 2008, 13:11:37
Tuhle možnost už jsem taky zkoumal, ale narazil jsem na tom, že mám dvourozměrné pole (viz ukázka nahoře) a array_flip() mi neprohodí klíč s hodnotou :(
|
||
Mike874 Profil * |
#4 · Zasláno: 4. 6. 2008, 14:06:58
host
pouzij uksort, s tim ze si napises vlastni porovnavaci funkci (je to v manualu, nic slozityho) v tej porovavaci funkci vemes parametry, prozenes je treba pres intval, takze ti zbyde jenom cislo, to porovnas,a podle toho vratis odpovidajici hodnotu porovnani pak to bude radit tak jak vy sis pral |
||
lordfrikk Profil |
#5 · Zasláno: 4. 6. 2008, 14:12:31
$pole = Array( 'i0' => Array(), 'i1' => Array(), 'i2' => Array(), .... 'i15' = Array() ); array_flip($pole[0]); |
||
nightfish Profil |
#6 · Zasláno: 4. 6. 2008, 14:21:12
řešení s vlastní porovnávací funkcí
function cmp($k1, $k2) { $k1 = (int)substr($k1, 1); $k2 = (int)substr($k2, 1); if ($k1 < $k2) return -1; else if ($k1 == $k2) return 0; // tenhle řádek by se dal vyhodit za cenu toho, že se občas bude prohazovat při řazení zbytečně else return 1; } uksort($pole, "cmp"); |
||
host Profil * |
#7 · Zasláno: 4. 6. 2008, 14:58:56
nightfish
mockrát díky, funguje to. |
||
Časová prodleva: 16 let
|
0