欢迎各位兄弟 发布技术文章

这里的技术是共享的

You are here

str_split 详解 sidebar chatgpt 有大用

str_split — 将字符串分割为数组(详细说明)

基本用法

php
array str_split(string $string, int $length = 1)

参数

  • $string:要分割的输入字符串。

  • $length:每个数组元素包含的字符数,默认为 1。必须为正整数(>=1),否则会触发警告并返回 false。

返回值

  • 返回由字符串片段组成的数组。如果 $length 大于字符串长度,则返回包含整个字符串的单元素数组。对空字符串返回空数组。

行为细节

  • 按字节分割(对单字节编码如 ASCII、ISO-8859-1 正常)。对于多字节编码(如 UTF-8),可能会在多字节字符中间截断,导致无效或破碎字符。

  • 若需按 Unicode 字符分割,请使用 mb_str_split(PHP 7.4+ 或 mbstring 扩展):

    php
    array mb_str_split(string $string, int $length = 1, string $encoding = null)

    或在旧版用 preg_split:

    php
    $chars = preg_split('//u', $string, -1, PREG_SPLIT_NO_EMPTY);
  • 当 length>1,最后一个片段可能比length 短(余数部分)。

示例

php
// 基本 print_r(str_split('hello')); // 输出: ['h','e','l','l','o'] // 指定长度为 2 print_r(str_split('abcdef', 2)); // 输出: ['ab','cd','ef'] // 长度大于字符串 print_r(str_split('abc', 10)); // 输出: ['abc'] // 与多字节问题(UTF-8) print_r(str_split('你好吗')); // 可能产生破碎字符 // 使用 mb_str_split 正确处理 print_r(mb_str_split('你好吗')); // ['你','好','吗']

错误与注意事项

  • $length <= 0 会产生 E_WARNING 并返回 false。

  • 对多字节字符串优先使用 mb_str_split 或 preg_split('//u', ...)。

性能

  • 对短字符串或简单分割非常高效;大量或复杂多字节处理应使用 mb_* 系列以保证正确性。

如果你需要,我可以给出按 UTF-8 正确分割的函数实现、兼容旧 PHP 版本的 polyfill,或示例在你的具体场景中如何使用。


普通分类: