PHP: Split string into array, like explode with no delimiter
我有一个字符串,例如:
"0123456789"
需要将每个字符分割成一个数组。
我尽力了:
但它给了我一个明显的提示:警告:explode中没有定义分隔符)。
我怎么会遇到这个?我看不到任何现成的方法,尤其是函数
1
| $array = str_split("0123456789bcdfghjkmnpqrstvwxyz"); |
str_split采用可选的第二个参数,即块长度(默认值为1),因此您可以执行以下操作:
1 2 3 4 5
| $array = str_split("aabbccdd", 2);
// $array[0] = aa
// $array[1] = bb
// $array[2] = cc etc ... |
您还可以通过将字符串视为数组来获取字符串的某些部分:
1 2 3 4
| $string ="hello";
echo $string[1];
// outputs"e" |
- 啊。错过了那个函数,正在拆分二进制数以便在数组中进行计算,这很好。
- 编码呢?
- PHP不理解编码。它只会将字符串拆分成字节,因此任何多字节字符都会变得混乱。PHP6本来是要解决这个问题的,但事实并非如此。
- @kicaj在php.net/mb_split的注释中,您可以看到adjwili编写的函数,它应该将utf8字符串拆分为字符。
你想完成什么?您可以像访问数组一样访问字符串中的字符:
1 2
| $s = 'abcd';
echo $s[0]; |
prints 'a'
试试这个:
1 2
| $str = '123456789';
$char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY ); |
- 这真的是不必要的,而且比str ou split慢得多。
- @埃里克:如果在$str没有长度的情况下需要返回一个空数组,那就不需要了。
- @在这种情况下,如果strlen返回0,那么简单地对$str进行strlen检查并设置$char_array = array()会更快。
str_split可以做到这一点。注意,PHP中的字符串可以像chars数组一样被访问,在大多数情况下,您不需要将字符串拆分为"新"数组。
下面是一个使用多字节(UTF-8)字符串的示例。
1 2 3 4 5 6
| $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()运行速度几乎一样快,对于小字符串,preg_split()运行速度很快,而对于大字符串,preg_split()运行速度要慢得多。
试试这个:
1 2
| $str = '546788';
$char_array = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY ); |
试试这个:
上面的示例将输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
| 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
) |
实际工作是否很好,但是如果您希望保留该字符串中的特殊字符,并且希望对它们进行一些操作,那么我将使用
因为对于我的一些个人用途,当有特殊字符的问题时,它已经被证明是更可靠的。
如果要拆分字符串,最好使用:
当有分隔符(分隔字符串)时,可以尝试,
其中,可以传递分解内第一个变量中的分隔符,例如: