【问题标题】:Convert a String into an Array of Characters将字符串转换为字符数组
【发布时间】:2011-02-15 15:13:29
【问题描述】:

在 PHP 中,我如何转换:

$result = "abdcef";

到一个数组中:

$result[0] = a;
$result[1] = b;
$result[2] = c;
$result[3] = d;

已编辑

【问题讨论】:

    标签: php arrays string


    【解决方案1】:

    你会想要使用 str_split()。

    $result = str_split('abcdef');
    

    http://us2.php.net/manual/en/function.str-split.php

    【讨论】:

    • 注意str_split('')返回非空数组
    • 注意:str_split() 在处理多字节编码的字符串时会分割成字节,而不是字符。
    【解决方案2】:

    不知道你是否已经意识到这一点,但你可能不需要做任何事情(取决于你想要做什么)。

    $string = "abcdef";
    echo $string[1];
    //Outputs "b"
    

    因此,如果您只需要一些简单的东西,就可以像访问数组一样访问它。

    【讨论】:

    • 这是最有效的方法,因为函数调用会产生更多开销。
    • 警告,使用多字节字符时无法正常工作!
    【解决方案3】:

    您可以使用 str_split() 函数:

    $value = "abcdef";
    $array = str_split($value);
    

    如果要将字符串分成不同数量的数组值,可以指定第二个参数:

    $array = str_split($value, 2);
    

    以上将把你的字符串分成两个块的数组。

    【讨论】:

      【解决方案4】:
      $result = "abcdef";
      $result = str_split($result);
      

      str_split 函数还有一个可选参数,用于分割成 x 个字符的块。

      【讨论】:

        【解决方案5】:

        如果需要手动或基本编程,最好选择“str_split()”,

            $string = "abcdef";
            $resultArr = [];
            $strLength = strlen($string);
            for ($i = 0; $i < $strLength; $i++) {
                $resultArr[$i] = $string[$i];
            }
            print_r($resultArr);
        

        输出:

        Array
        (
            [0] => a
            [1] => b
            [2] => c
            [3] => d
            [4] => e
            [5] => f
        )
        

        【讨论】:

          【解决方案6】:

          在str_split函数的帮助下,你会做到的。

          如下::

          <?php 
          $result = str_split('abcdef',1);
          echo "<pre>";
          print_r($result);
          ?>
          

          【讨论】:

            【解决方案7】:

            https://www.php.net/manual/en/function.str-split.php#refsect1-function.str-split-notes

            str_split() 在处理多字节编码的字符串时会分割成字节,而不是字符。

            请改用mb_str_split()

            【讨论】:

              【解决方案8】:

              你可以使用str_split()函数

              $array = str_split($string);
              
              foreach ($array as $p){
              
                  echo $p . "<br />";
              }
              

              【讨论】:

                【解决方案9】:

                如果您需要在过时的 PHP 版本(低于 PHP7.4 的版本)中支持多字节,则在带有 unicode 标志的空模式上使用 preg_split()。无需使用捕获组来减慢正则表达式引擎的速度。

                代码:(Demo)

                var_export(
                    preg_split('//u', 'abcåäö', 0, PREG_SPLIT_NO_EMPTY)
                    // or preg_split('/.\K/us', 'abcåäö', 0, PREG_SPLIT_NO_EMPTY)
                    // or preg_split('/\X\K/u', 'abcåäö', 0, PREG_SPLIT_NO_EMPTY)
                );
                

                对于 7.4 或更高版本的任何 PHP 版本,只需使用专用函数 mb_str_split()

                mb_str_split('abcåäö')
                

                输出:

                array (
                  0 => 'a',
                  1 => 'b',
                  2 => 'c',
                  3 => 'å',
                  4 => 'ä',
                  5 => 'ö',
                ) 
                

                作为对使用此页面上其他答案的研究人员的警告,如果您使用方括号语法按偏移量访问字符或使用str_split(),则在处理多字节字符时会得到错误的结果。

                对于任何进行深入研究的人,我还应该提到the \X (unicode version of the dot),它默认尊重换行符。 \X 与没有 s 修饰符的 . 略有不同。 Demo

                var_export(preg_split('/.\K/u', $string, 0, PREG_SPLIT_NO_EMPTY)); // element [1] has two characters in it!
                echo "\n---\n";
                var_export(preg_split('/.\K/us', $string, 0, PREG_SPLIT_NO_EMPTY));
                echo "\n---\n";
                var_export(preg_split('/\X\K/u', $string, 0, PREG_SPLIT_NO_EMPTY));
                

                【讨论】:

                  【解决方案10】:

                  str_split() 对于多字节字符不安全。

                  mb_str_split() 需要 PHP 7.4+。

                  尝试preg_split() 进行救援:

                  $result = preg_split('/(.)/u', 'abcåäö', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
                  

                  【讨论】:

                    猜你喜欢
                    • 2011-06-18
                    • 2017-11-27
                    • 1970-01-01
                    • 1970-01-01
                    相关资源
                    最近更新 更多