Daarvan wil ik de value 0 sorteren, in volgorde 1-2-10-DNF. Onderstaande functie werkt bijna perfect, alleen komt dan de tekst als eerste. Ik heb wel gevonden om op string te sorteren, maar dan komt 10 voor 2. Weet iemand hoe ik dit oplos?
usort($arr, function ($a, $b) {
return $a[0] - $b[0];
});
Je zult dan eerst moeten bepalen of array index 0 een string (tekst) is of dat deze numeriek is. Aan de hand daarvan zul je dan moeten bepalen welke vergelijking je maakt.
<?php
usort($arr, function ($a, $b)
{
// $a en $b zijn nog array's waarvan we de 0 index enkel gebruiken dus daarom even omzetten
$a = $a[0];
$b = $b[0];
// ctype_digit kijkt of de inhoud van de string numeriek is
$aIsDigit = ctype_digit($a);
$bIsDigit = ctype_digit($b);
// indien één van beide numeriek is dan gaat deze voor
if($aIsDigit xor $bIsDigit)
{
return $aIsDigit ? -1 : 1;
}
// indien ze beiden numeriek zijn dan gaat de laagste voor
elseif($aIsDigit and $bIsDigit)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
// beiden tekst? sorteer dan alfabetisch. Je kunt ook stricmp gebruiken als je geen onderscheid wilt maken tussen hoofdletters en kleine letters!
return strcmp($a, $b);
});
?>
[size=xsmall]Toevoeging op 26/09/2016 23:48:21:[/size]
@Frank, Omdat in het voorbeeld dat ik in het andere topic had gegeven de key in stand moest blijven. In dit geval zou het niet nodig zijn dus heb het antwoord aangepast.