Folow me on Pinterest
Prvi ste put ovdje? Pročitajte faq i registrirajte se.
x
  • Registracija
Dobrodošli, ovdje možete postavljati pitanja vezana za problematiku programiranja. Da bi postavili pitanje nije potrebna registracija :)

151 pitanja

182 odgovora

172 komentara

137 korisnika

Zadnje značke

Potvrđeni korisnik
TomObrien...
Vrhunsko pitanje
sinisa...
Potvrđeni korisnik
sokre...
Redovit
buco...
Starosjedilac
buco...

Zadatak: Sortiranje niza rastući i opadajući u PHP-u

+8 glasova

Potreban program koji sortira dati niz u rastući i u opadajući.

Upit Svi 21, 2013 anonimno  
   

2 Odgovori

+5 glasova
 
Najbolji odgovor

Za ovaj konkretni slučaj za sortiranje 100 brojeva vjerojatno ima i elegantnijih načina ali za to možeš i vlastitu funkciju napisati:

Ako je ovo primjer niza:

array (size=15)
  0 => int 32
  1 => int 84
  2 => int 5
  3 => int 1
  4 => int 9
  5 => int 77
  6 => int 29
  7 => int 51
  8 => int 54
  9 => int 41
  10 => int 10
  11 => int 43
  12 => int 97
  13 => int 73
  14 => int 15

Onda sljedeća funkcija:

function sortiraj_niz($niz, $smjer = 'ASC')
{
    foreach ($niz as $a => $v):
        foreach ($niz as $b => $v):
            if ($smjer === 'ASC'):
                if ($niz[$b] > $niz[$a]):
                    $tmp = $niz[$b];
                    $niz[$b] = $niz[$a];
                    $niz[$a] = $tmp;
                    unset($tmp);
                endif;
            elseif ($smjer === 'DESC'):
                if ($niz[$b] < $niz[$a]):
                    $tmp = $niz[$b];
                    $niz[$b] = $niz[$a];
                    $niz[$a] = $tmp;
                    unset($tmp);
                endif;                    
            endif;               
        endforeach;
    endforeach;

    return $niz;        
}

//uzlazno
var_dump(sortiraj_niz($niz));
/*    
array (size=15)
  0 => int 1
  1 => int 5
  2 => int 9
  3 => int 10
  4 => int 15
  5 => int 29
  6 => int 32
  7 => int 41
  8 => int 43
  9 => int 51
  10 => int 54
  11 => int 73
  12 => int 77
  13 => int 84
  14 => int 97
*/
//silazno
var_dump(sortiraj_niz($niz, 'DESC'));
/*
array (size=15)
  0 => int 97
  1 => int 84
  2 => int 77
  3 => int 73
  4 => int 54
  5 => int 51
  6 => int 43
  7 => int 41
  8 => int 32
  9 => int 29
  10 => int 15
  11 => int 10
  12 => int 9
  13 => int 5
  14 => int 1
*/
Odgovoreno Svi 22, 2013 dev_q (902)  
odabrano Svi 22, 2013 primjeri
Hvalaaaa....
+3 glasova

Koliko se god nama sortiranje čino "prirodno" toliko kompjuterima nije pa je i odgovor na općenito pitanje dosta općenit a na konkretniji primjer može se dobiti i konkretniji odgovor.

S tim u vezi ima i podosta funkcija za sortiranje nizova;

sortira niz uzlazno (a, b, c) (resetira ključeve)

bool sort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

sortira niz silazno (c, b, a) (resetira ključeve)

bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

sortira asocijativni niz uzlazno order, po vrijednosti (a, b, c) (čuva ključeve)

bool asort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

sortira asocijativni asocijativni uzlazno order, po ključu (a, b, c) (čuva ključeve)

bool ksort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

sortira asocijativni asocijativni silazno order, po vrijednosti (c, b, a) (čuva ključeve)

bool arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

sortira asocijativni asocijativni silazno order, po ključu (c, b, a) (čuva ključeve)

bool krsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

Za gornje funkcije vrijede ovi flag-ovi

  • SORT_REGULAR - usporedi normalno (ne mijenja tip)
  • SORT_NUMERIC - usporedi numerički
  • SORT_STRING - usporedi kao string
  • SORTLOCALESTRING - usporedi kao string, uvažava lokalno okruženje
    za jezik koji možete promjeniti i sa setlocale(LCALL, 'hrHR') za
    npr. hrvatski
  • SORT_NATURAL - usporedi kao string koristeći "prirodni redosljed"
    npr. natsort()
  • SORTFLAGCASE - može se kombinirati sa SORTSTRING ili SORTNATURAL
    za case insensitiv sortiranje

sortira niz po vrijednosti uz mogućnost korištenja funkcije za sortiranje (resetira ključeve)

bool usort ( array &$array , callable $cmp_function )

sortira niz po vrijednosti uz mogućnost korištenja funkcije za sortiranje (čuva ključeve)

bool uasort ( array &$array , callable $cmp_function )

sortira niz po ključu uz mogućnost korištenja funkcije za sortiranje (čuva ključeve)

bool uksort ( array &$array , callable $cmp_function )

sortira koristeći "prirodni algoritam" (čuva ključeve)

bool natsort ( array &$array )

sortira koristeći "prirodni algoritam" (čuva ključeve i ne pazi na mala i velika slova)

bool natcasesort ( array &$array )

Test skripta:

<pre>
<?php
$orginalni_niz = array(
    "BMW" => "m6",
    "bMW" => "M6",
    "Mercedes" => "E 270 CDI",
    "Lexus" => "IS 220d",
    "Mazda" => "6",
    "Toyota" => "Avensis",
    "toyota" => "avensis",
    "1" => "2",
    "2" => "1",
    "10" => "12",
    "12" => "10"
); 

$niz = $orginalni_niz;
sort($niz);
echo 'sort($niz)---------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
rsort($niz);
echo 'rsort($niz)--------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
asort($niz);
echo 'asort($niz)--------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
ksort($niz);
echo 'ksort($niz)--------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
arsort($niz);
echo 'arsort($niz)-------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
krsort($niz);
echo 'krsort($niz)-------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
natsort($niz);
echo 'natsort($niz)-------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
natcasesort($niz);
echo 'natcasesort($niz)-------------------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
usort($niz, 'strcasecmp');
echo 'usort($niz, "strcasecmp")-----------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
uasort($niz, 'strcasecmp');
echo 'uasort($niz, "strcasecmp")-----------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";

$niz = $orginalni_niz;
uksort($niz, 'strcasecmp');
echo 'uksort($niz, "strcasecmp")-----------------------------'."\n";
foreach ($niz as $key => $val) {
    echo "niz[" . $key . "] = " . $val . "\n";
}
echo "\n\n";
?>
</pre>

Referenca: http://php.net/manual/en/array.sorting.php

Odgovoreno Svi 21, 2013 yosip (535)  
Ažurirano Svi 22, 2013 yosip
Rezultat gornje skripte za brzu usporedbu je:

    sort($niz)---------------------------------------
    niz[0] = 1
    niz[1] = 2
    niz[2] = 6
    niz[3] = 10
    niz[4] = 12
    niz[5] = Avensis
    niz[6] = E 270 CDI
    niz[7] = IS 220d
    niz[8] = M6
    niz[9] = avensis
    niz[10] = m6
    
    
    rsort($niz)--------------------------------------
    niz[0] = m6
    niz[1] = avensis
    niz[2] = M6
    niz[3] = IS 220d
    niz[4] = E 270 CDI
    niz[5] = Avensis
    niz[6] = 12
    niz[7] = 10
    niz[8] = 6
    niz[9] = 2
    niz[10] = 1
    
    
    asort($niz)--------------------------------------
    niz[2] = 1
    niz[1] = 2
    niz[Mazda] = 6
    niz[12] = 10
    niz[10] = 12
    niz[Toyota] = Avensis
    niz[Mercedes] = E 270 CDI
    niz[Lexus] = IS 220d
    niz[bMW] = M6
    niz[toyota] = avensis
    niz[BMW] = m6
    
    
    ksort($niz)--------------------------------------
    niz[BMW] = m6
    niz[Lexus] = IS 220d
    niz[Mazda] = 6
    niz[Mercedes] = E 270 CDI
    niz[Toyota] = Avensis
    niz[bMW] = M6
    niz[toyota] = avensis
    niz[1] = 2
    niz[2] = 1
    niz[10] = 12
    niz[12] = 10
    
    
    arsort($niz)-------------------------------------
    niz[BMW] = m6
    niz[toyota] = avensis
    niz[bMW] = M6
    niz[Lexus] = IS 220d
    niz[Mercedes] = E 270 CDI
    niz[Toyota] = Avensis
    niz[10] = 12
    niz[12] = 10
    niz[Mazda] = 6
    niz[1] = 2
    niz[2] = 1
    
    
    krsort($niz)-------------------------------------
    niz[12] = 10
    niz[10] = 12
    niz[2] = 1
    niz[1] = 2
    niz[toyota] = avensis
    niz[bMW] = M6
    niz[Toyota] = Avensis
    niz[Mercedes] = E 270 CDI
    niz[Mazda] = 6
    niz[Lexus] = IS 220d
    niz[BMW] = m6
    
    
    natsort($niz)-------------------------------------
    niz[2] = 1
    niz[1] = 2
    niz[Mazda] = 6
    niz[12] = 10
    niz[10] = 12
    niz[Toyota] = Avensis
    niz[Mercedes] = E 270 CDI
    niz[Lexus] = IS 220d
    niz[bMW] = M6
    niz[toyota] = avensis
    niz[BMW] = m6
    
    
    natcasesort($niz)-------------------------------------
    niz[2] = 1
    niz[1] = 2
    niz[Mazda] = 6
    niz[12] = 10
    niz[10] = 12
    niz[toyota] = avensis
    niz[Toyota] = Avensis
    niz[Mercedes] = E 270 CDI
    niz[Lexus] = IS 220d
    niz[bMW] = M6
    niz[BMW] = m6
    
    
    usort($niz, "strcasecmp")-----------------------------
    niz[0] = 1
    niz[1] = 10
    niz[2] = 12
    niz[3] = 2
    niz[4] = 6
    niz[5] = avensis
    niz[6] = Avensis
    niz[7] = E 270 CDI
    niz[8] = IS 220d
    niz[9] = M6
    niz[10] = m6
    
    
    uasort($niz, "strcasecmp")-----------------------------
    niz[2] = 1
    niz[12] = 10
    niz[10] = 12
    niz[1] = 2
    niz[Mazda] = 6
    niz[toyota] = avensis
    niz[Toyota] = Avensis
    niz[Mercedes] = E 270 CDI
    niz[Lexus] = IS 220d
    niz[bMW] = M6
    niz[BMW] = m6
    
    
    uksort($niz, "strcasecmp")-----------------------------
    niz[1] = 2
    niz[10] = 12
    niz[12] = 10
    niz[2] = 1
    niz[BMW] = m6
    niz[bMW] = M6
    niz[Lexus] = IS 220d
    niz[Mazda] = 6
    niz[Mercedes] = E 270 CDI
    niz[Toyota] = Avensis
    niz[toyota] = avensis
Hvala puno na odgovoru. Evo malo potpunije: sortirati rastući niz od unesenih npr.do 100 prirodnih brojeva i isto tako i opadajući niz unesenih do 100 prirodnih brojeva. (Znači samo su brojevi u pitanju koji su nakon unosa( npr.100 brjeva)  treba sortirati po opadajućem i rasućem redosljedu. Još jednom hvala...
sort($niz, SORT_NUMERIC); za uzlazno sortiranje  odnosno rsort($niz, SORT_NUMERIC); za silazno sortiranje

Molimo prijavite se ili registrirajte da bi mogli odgovoriti na pitanje