PHP:将字符串拆分为数组,类似于没有分隔符的explode

80
我有一个字符串,例如:
“0123456789”
我需要将每个字符拆分成一个数组。
为此,我尝试了以下代码:
explode('', '123545789');

但是它给了我一个明显的警告:警告:在explode中未定义分隔符) ..

我该如何解决这个问题?我目前没有看到任何方法,特别是只有一个函数。

9个回答

140
$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"

啊,我错过了那个函数。我正在将二进制数字分割到一个数组中进行计算,这个方法效果不错。 - oni-kun
1
编码方面怎么样? - kicaj
PHP不理解编码。它只会将字符串拆分为字节,因此任何多字节字符都会出现问题。PHP6本应该修复这个问题,但并没有发生。 - bdsl
@kicaj 在 http://php.net/mb_split 的评论中,您可以看到 adjwilli 编写的一个函数,该函数应该将 UTF8 字符串拆分为字符。 - bdsl

19

您可以像访问数组一样访问字符串中的字符:

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

输出 'a'


当然,这个答案并没有尝试分割字符串,它只是演示了如何通过偏移量访问字符串中的字节值。 - mickmackusa

7

试试这个:

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

1
这真的是不必要的,而且比str_split慢得多。 - Erik
@Erik:如果您需要在$str没有长度的情况下返回一个空数组,则不是这样。 - hakre
在这种情况下,如果对 $str 进行 strlen 检查并且 strlen 返回 0,则直接将 $char_array = array() 设置为足够快。 - Travis Weston

5

str_split可以完成这个任务。需要注意的是,在PHP中,字符串可以像字符数组一样访问。在大多数情况下,您不需要将字符串拆分为“新”数组。


4

这是一个与多字节(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()速度较慢。


1

试试这个:

$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
)

1

试试这个:

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

1
这个回答缺少教育性解释。 - mickmackusa

0
如果你想要分割字符串,最好使用以下方法:
$array = str_split($string);

当您有一个分隔符分隔字符串时,您可以尝试:
explode('', $string);

在 explode 函数中,你可以将分隔符作为第一个变量传递进去,例如:
explode(',', $string);

如果OP已经说了explode('',$string);会让PHP失败,为什么还要尝试呢? - mickmackusa

0
$array = str_split("$string");

代码会相当好地工作,但是如果您想保留该字符串中的特殊字符,并对它们进行一些操作,那么我建议使用

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

因为在我的一些个人用途中,当涉及到特殊字符时,它已被证明更加可靠。


1
请定义“特殊字符”的含义。我知道你的意思,但其他研究人员可能不清楚。"THAN" 应该改为 "then"。 - mickmackusa
可能是ASCII之外的任何字符。 - KHAYRI R.R. WOULFE

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接