使用str_split()可按固定长度分割字符串,但处理多字节字符时需用mb_str_split()避免乱码,后者按字符而非字节分割,支持指定编码,推荐用于国际化场景。

在PHP中,将字符串按固定长度分割成数组,最直接且推荐的方法就是使用内置的
str_split()
str_split()
<?php
$longString = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
// 示例1:按固定长度分割
$chunks = str_split($longString, 5);
print_r($chunks);
/*
Array
(
[0] => ABCDE
[1] => FGHIJ
[2] => KLMNO
[3] => PQRST
[4] => UVWXY
[5] => Z0123
[6] => 45678
[7] => 9
)
*/
// 示例2:不指定长度(按单个字符分割)
$singleChars = str_split("Hello");
print_r($singleChars);
/*
Array
(
[0] => H
[1] => e
[2] => l
[3] => l
[4] => o
)
*/
// 示例3:当字符串长度不是分割长度的整数倍时
$shortString = "ABCDEF";
$shortChunks = str_split($shortString, 4);
print_r($shortChunks);
/*
Array
(
[0] => ABCD
[1] => EF
)
*/
// 最后一个元素会包含剩余的所有字符,不会填充。
// 示例4:处理空字符串
$emptyString = "";
$emptyChunks = str_split($emptyString, 3);
print_r($emptyChunks); // 输出:Array()
// 返回一个空数组,这符合预期。
?>str_split()
str_split
这是一个非常关键且容易被忽视的问题。
str_split()
str_split()
立即学习“PHP免费学习笔记(深入)”;
举个例子,一个UTF-8编码的中文字符通常占用3个字节。如果你用
str_split("你好世界", 2)<?php
$chineseString = "你好世界"; // 假设这是UTF-8编码
// 尝试用 str_split 分割
$badChunks = str_split($chineseString, 3); // 尝试按3字节分割,因为一个中文字符通常3字节
print_r($badChunks);
/*
Array
(
[0] => 你
[1] => 好
[2] => 世
[3] => 界
)
*/
// 看起来好像没问题?但如果分割长度不是3呢?
$badChunks2 = str_split($chineseString, 2);
print_r($badChunks2);
/*
Array
(
[0] => 浣
[1] => 濂
[2] => 涓
[3] => 晫
)
*/
// 结果是乱码!因为“你”字(UTF-8编码是E4BDA0)被切成了E4BD和A0,完全错了。
?>为了解决这个问题,PHP提供了
mb_str_split()
mbstring
mb_str_split()
str_split()
<?php
$chineseString = "你好世界"; // 假设这是UTF-8编码
// 使用 mb_str_split 分割,按字符长度2分割
$goodChunks = mb_str_split($chineseString, 2, 'UTF-8');
print_r($goodChunks);
/*
Array
(
[0] => 你好
[1] => 世界
)
*/
// 如果按单个字符分割
$singleMbChars = mb_str_split($chineseString, 1, 'UTF-8');
print_r($singleMbChars);
/*
Array
(
[0] => 你
[1] => 好
[2] => 世
[3] => 界
)
*/
?>所以,我的建议是,只要你的应用可能处理非ASCII字符,就应该毫不犹豫地选择
mb_str_split()
str_split
当然有,但具体选择哪种,得看你的需求场景。
str_split
手动循环结合 substr()
substr()
str_split()
<?php
$text = "1234567890ABCDEF";
$length = 3;
$result = [];
for ($i = 0; $i < strlen($text); $i += $length) {
$result[] = substr($text, $i, $length);
}
print_r($result);
/*
Array
(
[0] => 123
[1] => 456
[2] => 789
[3] => 0AB
[4] => CDE
[5] => F
)
*/
?>对于多字节字符,同样需要使用
mb_substr()
mb_strlen()
preg_split()
preg_split()
str_split()
<?php
// 示例:按非字母数字字符分割
$data = "apple,banana;orange-grape";
$parts = preg_split('/[^a-zA-Z0-9]+/', $data, -1, PREG_SPLIT_NO_EMPTY);
print_r($parts);
/*
Array
(
[0] => apple
[1] => banana
[2] => orange
[3] => grape
)
*/
?>chunk_split()
chunk_split()
<?php $hash = "a1b2c3d4e5f6g7h8i9j0k1l2m3n4o5p6"; $formattedHash = chunk_split($hash, 8, '-'); echo $formattedHash; // 输出:a1b2c3d4-e5f6g7h8-i9j0k1l2-m3n4o5p6- ?>
总结一下,对于固定长度的字符串分割并返回数组,
str_split()
mb_str_split()
preg_split()
str_split
选择合适的字符串分割方法,往往取决于你的具体业务场景和对性能、可读性的权衡。
str_split()
mb_str_split()
str_split()
ABC-123-XYZ
ABC123XYZ
str_split()
str_split()
str_split()
什么时候需要考虑其他方法呢?
preg_split()
str_split()
preg_split()
PREG_SPLIT_DELIM_CAPTURE
substr()
chunk_split()
总的来说,
str_split()
mb_str_split()
preg_split()
以上就是如何在PHP中将字符串按固定长度分割成数组?str_split详解的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号