PHP sortowanie liczb

0

witam.
jak sie odwraca kolajnosc liczb? ;) jest jakas inna funkcja? bo rsort(); to jak mam np.

1
3
5
6
2
7

to sortuje:
1
2
3
5
6
7

a ja chce:
7
6
5
3
2
1

;]

0

array_reverse? Zerknij do manuala.

0

No jak to? rsort() sortuje od elementu najwiekszego do najmniejszego.

0

uzylem ksort i dziala, ale nie zortuje to co ma, mam taki kod:

[code]
// Funckja wyswietla 10 najlepszych zlomowan
function top10(){
global $dataF;
$plik = file($dataF);
$dane1 = chop($plik);
$dane2 = explode('|',$dane1);
$dane3 = count($plik);

$i = 0;
$n = 1;
while($i < $dane3){
$datas = $plik[$i];
$dane = explode('|',$datas);
$top[$i] = $dane[11].'|'.$i.'|'.$dane[9];
$i++;
$n++;
}

krsort($top,SORT_NUMERIC);
// sort($top, SORT_NUMERIC);
reset($top);

echo '

NumKsiezycRaport wojenny

while(list($num,$dann) = each($top)){
if($num <= 9){
$danss = explode('|',$dann);
echo ''.++$num.'</td>'.$danss[0].'%</td>'.$danss[2].'</td></tr>';
}
}

echo '</table>';
}
[/code]

i w tym WHILE zeby wyswietlalo tylko 10 najlepszych, do zmiennej dodaje rozne badziewia, potem dziele i wyswietla ;) i to wlasnie przeszkadza, a nie wiem jak inaczej wywalic te zmienne na zewnatrz ;p

0

no dokładnie:

<?php
$bez = Array(1,3,5,6,2,7);
rsort($bez);
print_r($bez);

/*
Array
(
    [0] => 7
    [1] => 6
    [2] => 5
    [3] => 3
    [4] => 2
    [5] => 1
)
*/
?>

// no bo sortujesz stringa zawierającego jakieś jeszcze kreski i nie wiadomo co jako liczby no to jak chcesz mieć ładne wyniki ?

użyj array_multisort czy jakoś tak, coś w stylu:

<?php
// Funckja wyswietla 10 najlepszych zlomowan
function top10(){
 global $dataF;
 $plik = file($dataF);
 $dane1 = chop($plik);
 $dane2 = explode('|',$dane1);
 $dane3 = count($plik);

 $i = 0;
 $n = 1;
 while($i < $dane3){
	$datas = $plik[$i];
	$dane = explode('|',$datas);
	$doposort[] = $dane[11]; // według których danych chcesz sortować ?
	$top[] = $dane[11].'|'.$i.'|'.$dane[9];
	$i++;
	$n++;
 }

array_multisort($doposort, SORT_NUMERIC, SORT_DESC, $top);
reset($top);

?>
0

dzieki, dziala :) jakby kogos to zainteresowalo to ta funkcja jest tutaj:

http://www.polanie.9x.pl/zwymiany/rw/?action=list&show=top10

pozdro

0

Witam,
Mam kod:

<?php $fruits[1] = '15,1,42,7,38,11'; $fruits[2] = '7,1,49,13,37,12'; $fruits[3] = '16,10,41,8,40,9'; for($w=1; $w<=3; $w++){ $fruit = array($fruits[$w]); sort($fruit, SORT_NUMERIC); foreach ($fruit as $key => $val) { $dane[$w][] = $val; } $danecalosc = implode(",", $dane[$w]); echo $danecalosc.'
'; } ?>

Problem mam taki, że nie sortuje i nie wiem dlaczego…

0

Ponieważ sort działa na tablicach, a nie na stringach rozdzielanych przecinkiem.
Kod jest trochę szalony, wygląda na to, że chcesz:

  1. Uzyskać w stringach posortowane liczby
  2. Złączyć stringi (ale już nie sortować)
  3. W efekcie chcesz otrzymać coś takiego:
    1,7,11,15,38,42,1,7,12,13,37,49,8,9,10,16,40,41
    Czy tak?

PS. Gratuluję odkopania 6 letniego tematu ;)

0
dzek69 napisał(a):

Ponieważ sort działa na tablicach, a nie na stringach rozdzielanych przecinkiem.
Kod jest trochę szalony, wygląda na to, że chcesz:

  1. Uzyskać w stringach posortowane liczby
  2. Złączyć stringi (ale już nie sortować)
  3. W efekcie chcesz otrzymać coś takiego:
    1,7,11,15,38,42,1,7,12,13,37,49,8,9,10,16,40,41
    Czy tak?

PS. Gratuluję odkopania 6 letniego tematu ;)

Nie chciałem tworzyć nowego tematu.
Przedstawiłem część kodu który mi jest potrzebny.
Dokładnie potrzebuje żeby posortowane dane nie były wyświetlane ale zapisywane do bazy sql, a liczby pochodzą z inputa.
Dokładnie o to mi chodzi:
1 => 1,7,11,15,38,42 i to zapisuje do bazy (tymczasowo wyświetla przez echo żeby zobaczyć czy sotuje)
2 => 1,7,12,13,37,49
3 => 8,9,10,16,40,41

W takiej sytuacji jak stringa zamienić na tablicę ?

0
Luuk napisał(a):

(..)

W takiej sytuacji jak stringa zamienić na tablicę ?

explode?

0
noone_logged_out napisał(a):

explode?

Użyłem explode ale teraz mi pokazuje array zamiast liczb posortowanych

<?php $fruits[1] = '15,1,42,7,38,11'; $fruits[2] = '7,1,49,13,37,12'; $fruits[3] = '16,10,41,8,40,9'; for($w=1; $w<=3; $w++){ $arr = explode(",", $fruits[$w]); for($i=0; $i<=5; $i++){ $fruit[] = array($arr[$i]); } sort($fruit, SORT_NUMERIC); foreach ($fruit as $key => $val) { $dane[$w][] = $val; } $danecalosc = implode(",", $dane[$w]); echo $danecalosc.'
'; } ?>
0

Olśniło mnie ...

<?php $fruits[1] = '15,1,42,7,38,11'; $fruits[2] = '7,1,49,13,37,12'; $fruits[3] = '16,10,41,8,40,9'; for($w=1; $w<=3; $w++){ $fruit = explode(",", $fruits[$w]); sort($fruit, SORT_NUMERIC); foreach ($fruit as $key => $val) { $dane[$w][] = $val; } $danecalosc = implode(",", $dane[$w]); echo $danecalosc.'
'; } ?>

Tak na marginesie czy ten kot poprawnie jest napisany ? (spełnia swoją funkcję - najważniejsze.)
Dziękuję za pomoc.

0

Tak na marginesie czy ten kot poprawnie jest napisany ?

Całe to zdanie jest zwariowane, a ten "kot" to już w ogóle piękne.

Mnie się nie podobają losowe wcięcia np.

Przerwa na dowcip:

Maruiszek dostał 5 jabłek. Zjadł 3. Ile mu zostało? Pewnie myślisz, że 2? Guzik prawda... Nie wiadomo ile jabłek Mariuszek miał na początku. Morał - zawsze zeruj zmienne

Jeżeli zrobisz z powyższego kodu funkcję, to pół biedy, ale jak tu leci jakiś dłuższy strukturalny kod, to zastanów się nad zmienną $dane.

To, że wrzucasz te liczby w tablice i potem ją łączysz też może trochę zbędne - szybsze wydaje się łączenie tego jako string już od razu (tylko potem jeszcze zostanie usunąć nadmiarowy przecinek na końcu, chyba, że zamiast foreach użyjesz for oraz count, to wtedy ifem sprawdzisz czy to ostatni element i czy potrzeba przecinka).

Nazwy zmiennych kiepskie, ale jako początkujący też tak sobie nazywałem.

A ostatecznie - to jest php, skoro działa, to niech tak zostanie :D

1 użytkowników online, w tym zalogowanych: 0, gości: 1