några sidor på nätet om PHP programmering

Sök efter  
Börja här Uppgifter Testa dig själv Tips Sidokarta mm. Länkar Sök

Allmänt Manipulationer Sorteringar Stackar och köer Strängar

1.12.3 Sorteringar

Det finns en mängd olika metoder att sortera arrays på. Se mer i array *. Vi kommer oss dock rätt långt med asort, arsort, ksort, krsort, uasort och uksort.

  • asort - a-ö enligt arrayens värde
  • arsort - ö-a enligt arrayens värde
  • ksort - a-ö enligt arrayens index
  • krsort - ö-a enligt arrayens index
  • uasort - sortering av värden enligt egen metod
  • uksort - sortering av index enligt egen metod

Se nedan för exempel:

<?php
    
# skapar en array
    
$personer["anders"] = "nerd";
    
$personer["ville"] = "guru";
    
$personer["kalle"] = "dum";
    
$personer["adam"] = "son";
    
$personer["kain"] = "elak";

    echo
"sorterar med <b>asort</b> a-ö enligt värdet<br />";
    
asort( $personer );
    
visa ( $personer );
    
    echo
"sorterar med <b>arsort</b> ö-a enligt värdet<br />";
    
arsort( $personer );
    
visa ( $personer );

    echo
"sorterar med <b>ksort</b> a-ö enligt index<br />";
    
ksort( $personer );
    
visa ( $personer );
    
    echo
"sorterar med <b>ksort</b> ö-a enligt index<br />";
    
krsort( $personer );
    
visa ( $personer );

    echo
"sorterar med <b>uasort</b> egen sortering index<br />";
    
# andra parametern är namnet på den funktion som skall utföra
    # jämförelsen.
    
uasort( $personer , "myAsortCompare" );
    
visa ( $personer );

    echo
"sorterar med <b>uksort</b> egen sortering index<br />";
    
# andra parametern är namnet på den funktion som skall utföra
    # jämförelsen.
    
uksort( $personer , "myKsortCompare" );
    
visa ( $personer );

    function
visa( $arrayen )
    {
        
        if (
is_array( $arrayen ))
        {
            echo
"<table>";
            echo
"<tr><td><b>key</b></td><td><b>value</b></td></tr>\n";
            foreach(
$arrayen as $key=>$value)
            {
                echo
"<tr><td>$key</td><td>$value</td></tr>";
            }
            echo
"</table><br />";
        }
        else
        {
            echo
"Inge array<br />";
        }
    }

    
# egen funktion för uksort
    # sätter alltid anders först
    # allt annat sorteras som normalt
    
    # den skall returnera:
    # -1 om det första värdet i jämförelsen skall komma före det andra
    # 0 om de är lika
    # 1 om det andra värdet skall komma före det första
    
function myKsortCompare( $left, $right )
    {

        
# on första var "anders" säg att det är först
        
if ($left == "anders")
        {
            return -
1;
        }
        
# on andra var "anders" säg att det är först
        
elseif ($right == "anders")
        {
            return
1;
        }
        
# gör en vanlig strängjämförelse (inte case-sensitive)
        
else
        {
            return
strcasecmp( $left, $right );
        }

    }

    
# som ovan men sätter guru först
    
function myAsortCompare( $left, $right )
    {

        
# on första var "guru" säg att det är först
        
if ($left == "guru")
        {
            return -
1;
        }
        
# on andra var "guru" säg att det är först
        
elseif ($right == "guru")
        {
            return
1;
        }
        
# gör en vanlig strängjämförelse (inte case-sensitive)
        
else
        {
            return
strcasecmp( $left, $right );
        }

    }
?>
Listning 1.12.3.1 - samples/s106.php
[Visa i separat fönster]

 

   Börja härArraysSorteringar