Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PHP: How to sort the characters in a string?

I have a set of strings containing characters in a PHP script, I need to sort those characters in each string.

For example:

"bac" -> "abc" "abc" -> "abc" "" -> "" "poeh" -> "ehop" 

These characters don't have accents and are all lower case. How can I perform this in PHP?

like image 734
Jérôme Verstrynge Avatar asked Mar 28 '12 17:03

Jérôme Verstrynge


People also ask

How do you sort a character in PHP?

PHP - Sort Functions For Arrayssort() - sort arrays in ascending order. rsort() - sort arrays in descending order. asort() - sort associative arrays in ascending order, according to the value. ksort() - sort associative arrays in ascending order, according to the key.

What is Rsort PHP?

The rsort() function sorts an indexed array in descending order. Tip: Use the sort() function to sort an indexed array in ascending order.


2 Answers

I would make it an array and use the sort function:

$string = 'bac';  $stringParts = str_split($string); sort($stringParts); echo implode($stringParts); // abc 
like image 169
Mike B Avatar answered Sep 21 '22 17:09

Mike B


When using sort, it needs to be lowercase text. I had upper case strings cause many issues on my extremely string heavy site with asort() and sort() not knowing this ;). I use the following function for a quick script. Note the "strtolower" for the allChars function. You can then manipulate however you need later on with lowercase. Or, the other string ordering which handles upper case and lower case, is natcasesort(). Natcasesort which handles proper (natural) ordering - in the way we would order things on paper. You could provide an array, and use a foreach to separate each word. Or, use this is a base for creating a function that handles arrays. You could use implode('',$letters) instead of a foreach statement - but this function allows you to alter the letters if you need to - just do so inside the foreach. Also added implode functions in the case someone prefers those.

Lowercase Only

function allChars($w){     $letters = str_split(strtolower($w)); sort($letters);     $ret = "";     foreach($letters as $letter){         $ret .= $letter;     }     return $ret; } 

Lowercase Only With Implode

function implodeAllChars($w){     $letters = str_split(strtolower($w)); sort($letters);     return implode($letters); } 

Natural Ordering Function

function allCharsNat($w){     $letters = str_split($w); natcasesort($letters);     $ret = "";     foreach($letters as $letter){         $ret .= $letter;     }     return $ret; } 

Natural Ordering with Implode

function allCharsNatImplode($w){     $letters = str_split($w); natcasesort($letters);     return implode($letters); } 

It's quick and simple.

like image 22
James Cordeiro Avatar answered Sep 21 '22 17:09

James Cordeiro