将字符串转换为字符数组

60
在PHP中,我如何转换:
$result = "abdcef";

转换成一个数组,这个数组应该是:

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

编辑过

11个回答

104

4
请注意,str_split('') 返回的是非空数组。 - Klesun
2
注意:str_split()在处理多字节编码字符串时会将其拆分为字节而不是字符。 - StJoesy

30

不知道你是否已经意识到这一点,但根据你尝试做什么,你可能无需采取任何行动。

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

如果你只需要简单的东西,那么你可以像访问数组一样轻松地访问它。


这是最有效的方法,因为函数调用会产生更多的开销。 - Machavity
1
警告,使用多字节字符时无法按预期工作! - evilReiko

5
您可以使用str_split()函数:
$value = "abcdef";
$array = str_split($value);

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

$array = str_split($value, 2);

以上代码将把您的字符串分成两个一组的数组。

4
如果您需要在PHP7.4版本以下的过时版本中使用多字节支持,则可以在空模式上使用带有Unicode标志的preg_split()。无需使用捕获组来减慢正则表达式引擎。
代码: (演示)
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)
);

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

mb_str_split('abcåäö')

输出:

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

作为对在本页上使用方括号语法访问字符偏移量或使用str_split()函数的研究人员的警告,当处理多字节字符时,您将获得破损的结果。
对于任何进行彻底研究的人,我还应该提到点的Unicode版本\X默认情况下尊重换行符。 \X与没有s修饰符的.略有不同。 演示
var_export(preg_split('/.\K/u', "å\nä", 0, PREG_SPLIT_NO_EMPTY)); // element [1] has two characters in it!
echo "\n---\n";
var_export(preg_split('/.\K/us', "å\nä", 0, PREG_SPLIT_NO_EMPTY));
echo "\n---\n";
var_export(preg_split('/\X\K/u', "å\nä", 0, PREG_SPLIT_NO_EMPTY));

4

如果需要手动或基础编程,最好使用 "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
)

4
$result = "abcdef";
$result = str_split($result);

str_split函数还有一个可选参数,可以将字符串分割成每个长度为x的块。


4

3
借助于str_split函数,您就可以完成它。
就像下面这样:
<?php 
$result = str_split('abcdef',1);
echo "<pre>";
print_r($result);
?>

2
您可以使用str_split()函数。
$array = str_split($string);

foreach ($array as $p){

    echo $p . "<br />";
}

1

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

mb_str_split() 需要 PHP 7.4+。

尝试使用 preg_split() 进行解决:

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

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