Thursday 15 August 2013

arrays - modify php natcasesort so 'letters only' come first -



arrays - modify php natcasesort so 'letters only' come first -

i have array

$arr=array( "mega xyz no number", "classic no number", "doppel 80x200cm", "classic 100x200cm", "mega 240x250", "classic 85x200cm", "mega 40x250", "profi 60x235cm", "mega 140x250", );

and have next order:

classic no number classic 85x200cm classic 100x200cm doppel 80x200cm mega xyz no number mega 40x250 mega 140x250 mega 240x250 profi 60x235cm

php's function natcasesort() gets done right except 'classic no number' , 'mega xyz no number' won't first in 'group'! i'd have items without number in appear before alphabetically group-items numbers.

that's it:

function cmp($a, $b) { if ($a == $b) { homecoming 0; } $arr1 = str_split($a); $arr2 = str_split($b); $number1 = ""; $number2 = ""; for($i = 0; $i < count($arr1); $i++){ $char1 = $arr1[$i]; $char2 = $arr2[$i]; if(is_numeric($char1) && !is_numeric($char2)){ homecoming 1; } if(!is_numeric($char1) && is_numeric($char2)){ homecoming -1; } else if(is_numeric($char1) && is_numeric($char2)){ $number1 .= $char1; $number2 .= $char2; } else { if($char1 != $char2){ if(!empty($number1) && !empty($number2)){ $number1 = intval($number1); $number2 = intval($number2); homecoming ($number1 < $number2) ? -1 : 1; } homecoming ($char1 < $char2) ? -1 : 1; } else { if(!empty($number1) && !empty($number2) && $number1 != $number2){ $number1 = intval($number1); $number2 = intval($number2); homecoming ($number1 < $number2) ? -1 : 1; } } } } } usort($arr, "cmp");

php arrays sorting

No comments:

Post a Comment