PHP: How to sort the characters in a string?

前端 未结 5 1390
傲寒
傲寒 2020-11-30 07:19

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\"
\"a         


        
相关标签:
5条回答
  • 2020-11-30 08:01
    function sort_alphabet($str) {
        $array = array();
        for($i = 0; $i < strlen($str); $i++) {
            $array[] = $str{$i};
        }
        // alternatively $array = str_split($str);
        // forgot about this
    
        sort($array);
        return implode('', $array);
    }
    
    0 讨论(0)
  • 2020-11-30 08:15

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

    $string = 'bac';
    
    $stringParts = str_split($string);
    sort($stringParts);
    echo implode('', $stringParts); // abc
    
    0 讨论(0)
  • 2020-11-30 08:18

    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.

    0 讨论(0)
  • 2020-11-30 08:20

    You can split the string into an array and then use any of the various sorting functions.

    $in = "this is a test";
    $chars = str_split($in);
    sort($chars);
    $out = implode($chars);
    
    0 讨论(0)
  • 2020-11-30 08:23

    Keep in mind that str_split() does not support multibyte strings. In case you have to deal with e.g. UTF-8 strings, preg_split() should be used instead:

    $string = 'bac';
    $stringParts = preg_split('//u', $string);
    sort($stringParts);
    echo implode('', $stringParts); // abc
    
    0 讨论(0)
提交回复
热议问题