【发布时间】:2011-02-15 15:13:29
【问题描述】:
在 PHP 中,我如何转换:
$result = "abdcef";
到一个数组中:
$result[0] = a;
$result[1] = b;
$result[2] = c;
$result[3] = d;
已编辑
【问题讨论】:
在 PHP 中,我如何转换:
$result = "abdcef";
到一个数组中:
$result[0] = a;
$result[1] = b;
$result[2] = c;
$result[3] = d;
已编辑
【问题讨论】:
你会想要使用 str_split()。
$result = str_split('abcdef');
【讨论】:
str_split('')返回非空数组
不知道你是否已经意识到这一点,但你可能不需要做任何事情(取决于你想要做什么)。
$string = "abcdef";
echo $string[1];
//Outputs "b"
因此,如果您只需要一些简单的东西,就可以像访问数组一样访问它。
【讨论】:
您可以使用 str_split() 函数:
$value = "abcdef";
$array = str_split($value);
如果要将字符串分成不同数量的数组值,可以指定第二个参数:
$array = str_split($value, 2);
以上将把你的字符串分成两个块的数组。
【讨论】:
$result = "abcdef";
$result = str_split($result);
str_split 函数还有一个可选参数,用于分割成 x 个字符的块。
【讨论】:
如果需要手动或基本编程,最好选择“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
)
【讨论】:
在str_split函数的帮助下,你会做到的。
如下::
<?php
$result = str_split('abcdef',1);
echo "<pre>";
print_r($result);
?>
【讨论】:
https://www.php.net/manual/en/function.str-split.php#refsect1-function.str-split-notes
str_split() 在处理多字节编码的字符串时会分割成字节,而不是字符。
请改用mb_str_split()。
【讨论】:
你可以使用str_split()函数
$array = str_split($string);
foreach ($array as $p){
echo $p . "<br />";
}
【讨论】:
如果您需要在过时的 PHP 版本(低于 PHP7.4 的版本)中支持多字节,则在带有 unicode 标志的空模式上使用 preg_split()。无需使用捕获组来减慢正则表达式引擎的速度。
代码:(Demo)
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)
);
对于 7.4 或更高版本的任何 PHP 版本,只需使用专用函数 mb_str_split()。
mb_str_split('abcåäö')
输出:
array (
0 => 'a',
1 => 'b',
2 => 'c',
3 => 'å',
4 => 'ä',
5 => 'ö',
)
作为对使用此页面上其他答案的研究人员的警告,如果您使用方括号语法按偏移量访问字符或使用str_split(),则在处理多字节字符时会得到错误的结果。
对于任何进行深入研究的人,我还应该提到the \X (unicode version of the dot),它默认尊重换行符。 \X 与没有 s 修饰符的 . 略有不同。 Demo
var_export(preg_split('/.\K/u', $string, 0, PREG_SPLIT_NO_EMPTY)); // element [1] has two characters in it!
echo "\n---\n";
var_export(preg_split('/.\K/us', $string, 0, PREG_SPLIT_NO_EMPTY));
echo "\n---\n";
var_export(preg_split('/\X\K/u', $string, 0, PREG_SPLIT_NO_EMPTY));
【讨论】:
str_split() 对于多字节字符不安全。
mb_str_split() 需要 PHP 7.4+。
尝试preg_split() 进行救援:
$result = preg_split('/(.)/u', 'abcåäö', -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
【讨论】: