Autor Zpráva
host
Profil *
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
Potrebujes natural sort: natsort()

Predtim a potom musis prohodit klice a hodnoty.
host
Profil *
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 *
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
$pole = Array(
  'i0' => Array(),
  'i1' => Array(),
  'i2' => Array(),
  ....
  'i15' = Array()
 );

array_flip($pole[0]);
nightfish
Profil
ř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 *
nightfish
mockrát díky, funguje to.

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: