Autor Zpráva
4li
Profil
Zdravim.

Existuje pole:
array(1 => online, 2 => offline, 3 => busy, 4 => offline, 5=> online);


Potrebujem toto pole zoradit nasledovne (pri zachovani klucov):
array(1 => online, 5=> online, 3 => busy, 2 => offline, 4 => offline);

tj. (online, busy, offline)

Dik za kazdu radu. :)
Radek Cvek
Profil
Takto?
<?php
$array = array(1 => online, 2 => offline, 3 => busy, 4 => offline, 5=> online);
print_r($array);
echo'<br />';

while ($hodnota = current($array)) {
    if ($hodnota == 'online') $online[key($array)] = $hodnota;
    if ($hodnota == 'busy') $busy[key($array)] = $hodnota;
    if ($hodnota == 'offline') $offline[key($array)] = $hodnota;   
    next($array);
}

$array = $online + $busy + $offline;
print_r($array);
?>
4li
Profil
Vyhlasuje error. Nedalo by sa to riesit cez niektoru funkciu "sort"?
Kcko
Profil
4li:
Než tu hodinu bádat, přemýšlet a čekat, nebude lepší si to pole seřadit ručně?

Radek Cvek:
Víte, že existuje
foreach
?
4li
Profil
Kcko:
To pole je dynamicke, takze to potrebujem zoradovat automaticky.
Radek Cvek
Profil
4li:
Sortů je celá řada - škoda, že řada online, busy, offline není seřazena ani podle abecedy ani podle velikosti ani naopak.
Sort, který by se na to hodil neznám.
Vyhlasuje error - co přesně?
Kcko
Profil
4li:
Napsat si vlastní sort nebo si to pole přeskládat lépe.

http://www.php-questions.com/phpfaq/answer116
4li
Profil
Tato funkcia funguje tak ako potrebujem, ale zaroven aj usporiadava hodnoty v nahodnom poradi, co nechcem. Da sa to zmenit?

function line_up($a, $b)
{
  if($a == $b) return rand(0, 1)*2-1;
  $example = array("free", "showtime", "online", "busy", "book-me", "offline");
  return(array_search($a, $example) < array_search ($b, $example)) ? -1 :1;
}

uasort($models_statuses, "line_up");

Najde sa niekto, kto by prerobil hore uvedeny kod?

Dik moc! :)

Moderátor panther: Sloučeny dva příspěvky do jednoho.
Mike8748
Profil
4li:
tak edit:
function line_up($a, $b)
{
  $example = array("free", "showtime", "online", "busy", "book-me", "offline");
  if(array_search($a,$example) == array_search($b,$example)) return 0;
  return(array_search($a, $example) < array_search ($b, $example)) ? -1 :1;
}
4li
Profil
Mike8748:
Funguje, dik moc! :)

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: