【问题标题】:PHP: Split string into array, like explode with no delimiterPHP:将字符串拆分为数组,例如没有分隔符的爆炸
【发布时间】:2011-01-11 08:04:00
【问题描述】:

我有一个字符串,例如:

“0123456789”

并且需要将每个字符拆分成一个数组。

我真的试过了:

explode('', '123545789');

但它给了我明显的信息:警告:没有在爆炸中定义分隔符) ..

我怎么会遇到这个?我看不到任何方法,尤其是一个函数

【问题讨论】:

    标签: php string arrays split explode


    【解决方案1】:
    $array = str_split("$string");
    

    实际上可以很好地工作,但是如果您想保留该字符串中的特殊字符,并且想对它们进行一些操作,那么我会使用

    do {
        $array[] = mb_substr( $string, 0, 1, 'utf-8' );
    } while ( $string = mb_substr( $string, 1, mb_strlen( $string ), 'utf-8' ) );
    

    因为对于我的一些个人用途,当出现特殊字符问题时,它已被证明更可靠

    【讨论】:

      【解决方案2】:
      $array = str_split("0123456789bcdfghjkmnpqrstvwxyz");
      

      str_split 采用可选的第二个参数,即块长度(默认为 1),因此您可以执行以下操作:

      $array = str_split("aabbccdd", 2);
      
      // $array[0] = aa
      // $array[1] = bb
      // $array[2] = cc  etc ...
      

      您还可以通过将字符串视为数组来获取部分字符串:

      $string = "hello";
      echo $string[1];
      
      // outputs "e"
      

      【讨论】:

      • 啊。错过了该功能,正在拆分二进制数以在数组中进行计算,这很好用。
      • 编码怎么样?
      • PHP 不理解编码。它只会将字符串拆分为字节,因此任何多字节字符都会被弄乱。 PHP6 应该解决这个问题,但它没有发生。
      • @kicaj 在 php.net/mb_split 的 cmets 中,您可以看到 adjwilli 编写的函数,它应该将 UTF8 字符串拆分为字符。
      【解决方案3】:

      这是一个适用于多字节 (UTF-8) 字符串的示例。

      $str = 'äbcd';
      
      // PHP 5.4.8 allows null as the third argument of mb_strpos() function
      do {
          $arr[] = mb_substr( $str, 0, 1, 'utf-8' );
      } while ( $str = mb_substr( $str, 1, mb_strlen( $str ), 'utf-8' ) );
      

      也可以使用 preg_split() ( preg_split( '//u', $str, null, PREG_SPLIT_NO_EMPTY ) ) 来完成,但与上面的示例不同,无论字符串大小如何,它的运行速度几乎一样快,preg_split() 对于小字符串来说速度很快,但速度要慢很多大的。

      【讨论】:

        【解决方案4】:

        你想完成什么?您可以像访问数组一样访问字符串中的字符:

        $s = 'abcd';
        echo $s[0];
        

        打印'a'

        【讨论】:

          【解决方案5】:

          试试这个:

          $str = '123456789';
          $char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
          

          【讨论】:

          • 这真的没必要,而且比 str_split 慢了很多。
          • @Erik:如果您需要返回一个空数组以防$str 没有长度,则不需要。
          • @hakre 在这种情况下,如果strlen 返回 0,只需对 $str 进行 strlen 检查并设置 $char_array = array() 会更快。
          【解决方案6】:

          如果要拆分字符串,最好使用:

          $array = str_split($string);
          

          当你有分隔符,用来分隔字符串时,你可以试试,

          explode('' ,$string);
          

          您可以在explode内部的第一个变量中传递分隔符,例如:

          explode(',',$string);
          

          【讨论】:

            【解决方案7】:

            试试这个:

            $str = "Hello Friend";
            
            $arr1 = str_split($str);
            $arr2 = str_split($str, 3);
            
            print_r($arr1);
            print_r($arr2);
            

            上面的例子会输出:

            Array
            (
                [0] => H
                [1] => e
                [2] => l
                [3] => l
                [4] => o
                [5] =>
                [6] => F
                [7] => r
                [8] => i
                [9] => e
                [10] => n
                [11] => d
            )
            
            Array
            (
                [0] => Hel
                [1] => lo
                [2] => Fri
                [3] => end
            )
            

            【讨论】:

              【解决方案8】:

              试试这个:

                  $str = '546788';
                  $char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
              

              【讨论】:

                【解决方案9】:

                str_split 可以解决问题。请注意,PHP 中的字符串可以像 chars 数组一样被访问,在大多数情况下,您不需要将字符串拆分为“新”数组。

                【讨论】:

                  猜你喜欢
                  • 2013-09-09
                  • 1970-01-01
                  • 1970-01-01
                  • 2011-02-21
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多