【问题标题】:PHP: How to sort the characters in a string?PHP:如何对字符串中的字符进行排序?
【发布时间】:2012-04-12 08:06:40
【问题描述】:

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

例如:

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

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

【问题讨论】:

    标签: php string sorting character


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      使用排序时,需要为小写文本。我的大写字符串导致我的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);
      }
      

      快速简单。

      【讨论】:

        【解决方案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);
        }
        

        【讨论】:

        • 丹,看看 str_split 函数!
        • 是的,你找到我了。没有想太多:) 编辑。谢谢
        【解决方案4】:

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

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

        【讨论】:

          【解决方案5】:

          请记住 str_split() 不支持多字节字符串。如果你必须处理例如UTF-8 字符串,应该使用 preg_split() 代替:

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

          【讨论】:

          • 如果 php 版本 >= 7.0 则使用 mb_str_split()
          猜你喜欢
          • 2011-01-23
          • 1970-01-01
          • 1970-01-01
          • 2012-02-24
          • 2011-08-19
          • 2022-01-13
          • 2012-03-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多