要将字符串转为固定大小数组,需先用str_split、explode或preg_split将字符串转为数组,再用array_chunk按指定大小分块,处理多字节字符时应使用mb_str_split或preg_split('/./u')以避免乱码。

将一个字符串转换为固定大小的数组,这听起来像是一个字符串操作,但实际上,PHP的
array_chunk
array_chunk
要实现这个目标,通常需要两步操作:
str_split()
explode()
preg_split()
array_chunk()
array_chunk()
以下是具体的代码示例:
<?php
// 示例1:将字符串按字符分割,再按每3个字符一组进行分块
$string1 = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
$charArray = str_split($string1); // 转换为字符数组
$chunkedChars = array_chunk($charArray, 3);
echo "--- 字符分块示例 ---" . PHP_EOL;
print_r($chunkedChars);
/*
输出大致如下:
Array
(
[0] => Array
(
[0] => A
[1] => B
[2] => C
)
[1] => Array
(
[0] => D
[1] => E
[2] => F
)
...
)
*/
echo PHP_EOL;
// 示例2:将句子按单词分割,再按每2个单词一组进行分块
$string2 = "This is a sample sentence for demonstration purposes";
$wordArray = explode(" ", $string2); // 转换为单词数组
$chunkedWords = array_chunk($wordArray, 2);
echo "--- 单词分块示例 ---" . PHP_EOL;
print_r($chunkedWords);
/*
输出大致如下:
Array
(
[0] => Array
(
[0] => This
[1] => is
)
[1] => Array
(
[0] => a
[1] => sample
)
...
)
*/
echo PHP_EOL;
// 示例3:使用 preg_split 进行更灵活的分割,例如按非字母数字字符分割
$string3 = "Hello-World!How_are.you?";
$partsArray = preg_split('/[^a-zA-Z0-9]+/', $string3, -1, PREG_SPLIT_NO_EMPTY);
$chunkedParts = array_chunk($partsArray, 2);
echo "--- 正则分割分块示例 ---" . PHP_EOL;
print_r($chunkedParts);
/*
输出大致如下:
Array
(
[0] => Array
(
[0] => Hello
[1] => World
)
[1] => Array
(
[0] => How
[1] => are
)
[2] => Array
(
[0] => you
)
)
*/
?>array_chunk
array_chunk
立即学习“PHP免费学习笔记(深入)”;
array_chunk(array $array, int $size, bool $preserve_keys = false): array
让我们逐一解析这些参数:
$array
$size
$size
$size
$preserve_keys
false
false
0
true
工作原理与返回值:
array_chunk
示例:$preserve_keys
<?php
$data = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
echo "--- preserve_keys = false (默认) ---" . PHP_EOL;
$chunks_default = array_chunk($data, 2);
print_r($chunks_default);
/*
输出:
Array
(
[0] => Array
(
[0] => 1
[1] => 2
)
[1] => Array
(
[0] => 3
[1] => 4
)
[2] => Array
(
[0] => 5
)
)
*/
echo PHP_EOL;
echo "--- preserve_keys = true ---" . PHP_EOL;
$chunks_preserved = array_chunk($data, 2, true);
print_r($chunks_preserved);
/*
输出:
Array
(
[0] => Array
(
[a] => 1
[b] => 2
)
[1] => Array
(
[c] => 3
[d] => 4
)
[2] => Array
(
[e] => 5
)
)
*/
?>从上面的例子可以看出,当
preserve_keys
true
a
b
c
false
0
str_split
在使用
str_split()
str_split()
str_split()
str_split
<?php
$chineseString = "你好世界"; // 包含中文字符的字符串
$chars = str_split($chineseString);
echo "--- str_split 处理中文字符的错误示例 ---" . PHP_EOL;
print_r($chars);
/*
输出:
Array
(
[0] => �
[1] => �
[2] => �
[3] => �
[4] => �
[5] => �
[6] => �
[7] => �
)
你会看到乱码,因为一个中文字符被拆成了多个字节。
*/
?>替代方案:mb_str_split()
preg_split()
为了正确处理多字节字符,我们应该使用支持多字节字符串的函数。
mb_str_split()
str_split()
str_split()
<?php
$chineseString = "你好世界";
// 假设你的字符串是UTF-8编码
if (function_exists('mb_str_split')) {
$mbChars = mb_str_split($chineseString, 1, 'UTF-8');
echo "--- mb_str_split 正确处理中文字符 ---" . PHP_EOL;
print_r($mbChars);
/*
输出:
Array
(
[0] => 你
[1] => 好
[2] => 世
[3] => 界
)
*/
// 然后再用 array_chunk 进行分块
$chunkedMbChars = array_chunk($mbChars, 2);
echo "--- mb_str_split 后 array_chunk 分块 ---" . PHP_EOL;
print_r($chunkedMbChars);
/*
输出:
Array
(
[0] => Array
(
[0] => 你
[1] => 好
)
[1] => Array
(
[0] => 世
[1] => 界
)
)
*/
} else {
echo "PHP版本低于7.4,mb_str_split() 不可用。" . PHP_EOL;
}
?>preg_split()
u
preg_split()
u
<?php
$chineseString = "你好世界,这是一个测试。";
// 使用空正则表达式 '/./u' 来匹配每一个UTF-8字符
$pregChars = preg_split('//u', $chineseString, -1, PREG_SPLIT_NO_EMPTY);
echo "--- preg_split 正确处理中文字符 ---" . PHP_EOL;
print_r($pregChars);
/*
输出:
Array
(
[0] => 你
[1] => 好
[2] => 世
[3] => 界
[4] => ,
[5] => 这
[6] => 是
[7] => 一
[8] => 个
[9] => 测
[10] => 试
[11] => 。
)
*/
// 然后再用 array_chunk 进行分块
$chunkedPregChars = array_chunk($pregChars, 5);
echo "--- preg_split 后 array_chunk 分块 ---" . PHP_EOL;
print_r($chunkedPregChars);
/*
输出:
Array
(
[0] => Array
(
[0] => 你
[1] => 好
[2] => 世
[3] => 界
[4] => ,
)
[1] => Array
(
[0] => 这
[1] => 是
[2] => 一
[3] => 个
[4] => 测
)
[2] => Array
(
[0] => 试
[1] => 。
)
)
*/
?>PREG_SPLIT_NO_EMPTY
在处理包含多字节字符的字符串时,务必注意选择正确的函数,否则会导致难以调试的乱码问题。我个人倾向于在PHP 7.4+的环境下优先使用
mb_str_split()
array_chunk
array_chunk
忘记 array_chunk
array_chunk
array
array_chunk("some_string", 3)TypeError
Warning
str_split()
explode()
preg_split()
$size
$size
0
$size
0
array_chunk
ValueError
Warning
$size
$size
array_chunk
$size
$preserve_keys
$preserve_keys
false
0
true
['user_id' => 1, 'username' => 'test']
true
[0 => 1, 1 => 'test']
preserve_keys
处理空数组的场景: 如果
array_chunk
[]
[]
内存消耗问题(针对超大数组): 当处理包含数百万甚至上千万元素的超大数组时,一次性将整个数组加载到内存中,再进行
array_chunk
Allowed memory size of X bytes exhausted
array_chunk
array_chunk
LIMIT
OFFSET
Iterator
Generator
yield
array_slice
array_slice
array_chunk
理解这些常见的错误和陷阱,能够帮助你更健壮、高效地使用
array_chunk
以上就是如何用PHP将字符串转为固定大小的数组?array_chunk详解的详细内容,更多请关注php中文网其它相关文章!
PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号