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


PHP: How to sort the characters in a string?

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

例如:

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

这些字符没有重音,都是小写字母。如何在PHP中执行此操作?

我会把它做成一个数组,并使用排序函数:

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

使用排序时,它需要是小写文本。我的大写字符串在我的字符串非常重的网站上引起了很多问题,asort()和sort()不知道这一点;)。我使用以下函数来编写一个快速脚本。注意";strtolower";用于allChars函数。然后,您可以根据需要使用小写字母进行操作。或者,处理大写和小写的另一个字符串排序是natcasesort()。Natcasesort处理正确(自然)的排序——就像我们在纸上排序一样。您可以提供一个数组,并使用foreach来分隔每个单词。或者,使用它作为创建处理数组的函数的基础。您可以使用内爆(",$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;
}

隐含的自然排序

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

它既快捷又简单。

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

您可以将字符串拆分为一个数组,然后使用各种排序函数中的任何一个。

$in = "this is a test";
$chars = str_split($in);
sort($chars);
$out = implode($chars);
请记住str_split()不支持多字节字符串。如果您必须处理例如UTF-8字符串,则应使用preg_split():
$string = 'bac';
$stringParts = preg_split('//u', $string);
sort($stringParts);
echo implode($stringParts); // abc