PHP:如何对字符串中的字符进行排序?

时间:2012-03-28 17:13:16

标签: php string sorting character

我有一组包含PHP脚本中字符的字符串,我需要在每个字符串中对这些字符进行排序。

例如:

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

这些字符没有重音符号,均为小写。我怎样才能在PHP中执行此操作?

5 个答案:

答案 0 :(得分:40)

我会把它变成一个数组并使用sort函数:

$string = 'bac';

$stringParts = str_split($string);
sort($stringParts);
echo implode('', $stringParts); // abc

答案 1 :(得分:5)

使用sort时,它必须是小写文本。我有大写字符串导致我的extremely string heavy site上的许多问题与asort()和sort()不知道这个;)。我使用以下函数来快速编写脚本。注意allChars函数的“strtolower”。然后,您可以稍后使用小写操作。或者,处理大写和小写的其他字符串排序是natcasesort()。处理正确(自然)排序的Natcasesort - 就像我们在纸上订购东西一样。您可以提供一个数组,并使用foreach来分隔每个单词。或者,使用它是创建处理数组的函数的基础。您可以使用implode('',$ letters)而不是foreach语句 - 但是如果需要,此函数允许您更改字母 - 只需在foreach中执行此操作即可。在有人喜欢的情况下,还添加了内爆功能。

仅限小写

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

仅使用Implode小写

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

自然排序功能

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

使用Implode进行自然排序

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

快速而简单。

答案 2 :(得分:3)

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);
}

答案 3 :(得分:1)

您可以将字符串拆分为数组,然后使用各种sorting functions

$in = "this is a test";
$chars = str_split($in);
sort($chars);
$out = implode($chars);

答案 4 :(得分:0)

请记住,str_split()不支持多字节字符串。万一您必须处理例如UTF-8字符串,应改用preg_split():

$string = 'bac';
$stringParts = preg_split('//u', $string);
sort($stringParts);
echo implode('', $stringParts); // abc