PHP hjälp - sortera 2dimensionellarray

Tråden skapades och har fått 5 svar. Det senaste inlägget skrevs .
1
  • Medlem
  • Stockholm
  • 2003-11-09 14:11

Hej!

Har arbetat med en sida så mycket att jag inte kan riktigt tänka längre...
Jag skulle uppskatta enormt om någon kunde hjälpa mig med hur jag sorterar den här arrayen som är tänkt som
array[rad][kolumn] där jag vill sortera efter kolumner.

$arr[$i]['poang'] = "0";
	$arr[$i]['id'] = $data['id'];
	$arr[$i]['namn'] = $data['namn'];
	$arr[$i]['spelade'] = "0";
	$arr[$i]['vunna'] = "0";
	$arr[$i]['oavgjorda'] = "0";
	$arr[$i]['forlorade'] = "0";
	$arr[$i]['gjorda'] = "0";
	$arr[$i]['inslappta'] = "0";
	$arr[$i]['skillnad'] = "0";

(arrayen fylls med mer intressanta värden sen)
Jag vill att besökaren ska kunna sortera arrayen efter namn (vilket är en textsträng) eller efter poäng (och de andra heltalsfälten...)

  • Oregistrerad
  • 2003-11-09 19:14

Här är en smart funktion som jag hittade bland kommentarerna på php.net. Den tar hur många argument som helst. Första argumentet skall vara arrayen och sedan kolumnerna du vill sortera efter. Du kan också välja om du vill sortera stigande eller fallande mm genom att använda konstanterna SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.

I ditt fall kan du använda array_csort($array, 'namn', SORT_ASC);

function array_csort() {  //coded by Ichier2003 
    	$args = func_get_args(); 
    	$marray = array_shift($args); 

    	$msortline = "return(array_multisort("; 
    	foreach ($args as $arg) { 
    	    $i++; 
    	    if (is_string($arg)) { 
    	        foreach ($marray as $row) { 
    	            $sortarr[$i][] = $row[$arg]; 
    	        } 
    	    } else { 
    	        $sortarr[$i] = $arg; 
    	    } 
    	    $msortline .= "\$sortarr[".$i."],"; 
    	} 
    	$msortline .= "\$marray));"; 

    	eval($msortline); 
    	return $marray; 
	}

edit/ det verkar som det följer med skräptecken om man klipper och klistrar från [ php]-taggen. Jag testar att ändra till [ code].
edit 2/ nu går det.

Sidokommentar: I kommentarerna på php.net finns det ofta väldigt mycket användbar information, det har jag upplevt många gånger.

  • Oregistrerad
  • 2003-11-10 02:18
Citat:

Skrevs ursprungligen av Adrian B
Sidokommentar: I kommentarerna på php.net finns det ofta väldigt mycket användbar information, det har jag upplevt många gånger.

Kan bara hålla med

  • Medlem
  • Stockholm
  • 2003-11-14 10:42
Citat:

Skrevs ursprungligen av Balkelito
Här är en smart funktion som jag hittade bland kommentarerna på php.net. Den tar hur många argument som helst. Första argumentet skall vara arrayen och sedan kolumnerna du vill sortera efter. Du kan också välja om du vill sortera stigande eller fallande mm genom att använda konstanterna SORT_ASC, SORT_DESC, SORT_REGULAR, SORT_NUMERIC, SORT_STRING.

I ditt fall kan du använda array_csort($array, 'namn', SORT_ASC);

function array_csort() {  //coded by Ichier2003 
    	$args = func_get_args(); 
    	$marray = array_shift($args); 

    	$msortline = "return(array_multisort("; 
    	foreach ($args as $arg) { 
    	    $i++; 
    	    if (is_string($arg)) { 
    	        foreach ($marray as $row) { 
    	            $sortarr[$i][] = $row[$arg]; 
    	        } 
    	    } else { 
    	        $sortarr[$i] = $arg; 
    	    } 
    	    $msortline .= "\$sortarr[".$i."],"; 
    	} 
    	$msortline .= "\$marray));"; 

    	eval($msortline); 
    	return $marray; 
	}

edit/ det verkar som det följer med skräptecken om man klipper och klistrar från [ php]-taggen. Jag testar att ändra till [ code].
edit 2/ nu går det.

Tackar
Förstår inte riktigt hur den fungerar faktiskt.. ska nog gå igenom den ordentligt sen så jag förstår.. hur som helst fungerar den ... great !!
tack!

1
Bevaka tråden