PHP:将字符串拆分为数组,就像没有分隔符的爆炸一样


75

我有一个字符串,例如:

“ 0123456789”

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

我为它的地狱尝试:

explode('', '123545789');

但这给了我显而易见的警告:警告:爆炸中未定义分隔符

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

Answers:


133
$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 '16

PHP不了解编码。它只会将字符串分割成字节,因此任何多字节字符都会被弄乱。PHP6应该可以解决此问题,但是没有发生。
bdsl

@kicaj在在评论php.net/mb_split你可以看到adjwilli写一个函数,它应该拆分UTF8字符串转换成字符。
bdsl

19

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

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

打印' a '


6

尝试这个:

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

这确实是不必要的,并且比str_split慢很多。
艾里克(Erik)2010年

@Erik:如果您需要返回一个空数组,以防$str它没有长度,则不需要。
hakre 2013年

@hakre在这种情况下,这将是足量更快地简单地做一个strlen的支票$str和一组$char_array = array(),如果strlen返回0
特拉维斯韦斯顿


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(),小字符串的运行速度快,而大字符串的运行速度慢得多。


2

尝试这个:

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

2

尝试这个:

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

0

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

$array = str_split($string);

当您使用分隔符来分隔字符串时,可以尝试一下,

explode('' ,$string);

您可以在爆炸内部的第一个变量中传递定界符的位置,例如:

explode(',',$string);

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' ) );

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.