在 PHP 中,array_chunk 是一个非常实用的函数,可以将一个大数组分割成多个小数组,并且它还允许我们定义每个小数组的最大长度。
函数签名如下:
array_chunk(array $array, int $length, bool $preserve_keys = false): array
$array:输入的数组。
$length:每个分割数组的长度。
$preserve_keys:如果设置为 true,则返回的数组将保留原数组的键名;如果为 false,则返回的数组会重新生成连续的数字键名。
默认情况下,array_chunk 会根据第三个参数 $preserve_keys 来决定是否保留原数组的键名:
当 $preserve_keys 设置为 false(默认值)时,返回的新数组将使用连续的数字键名,从 0 开始。
当 $preserve_keys 设置为 true 时,新数组将保留原数组的键名。
<?php
$array = [10 => 'a', 20 => 'b', 30 => 'c', 40 => 'd', 50 => 'e'];
$result = array_chunk($array, 2);
print_r($result);
?>
输出结果:
Array
(
[0] => Array
(
[0] => a
[1] => b
)
[1] => Array
(
[0] => c
[1] => d
)
[2] => Array
(
[0] => e
)
)
如您所见,在上述代码中,$preserve_keys 默认为 false,因此返回的数组的键名被重新编号为 0, 1, 2,并不保留原数组中的 10, 20, 30 等键名。
<?php
$array = [10 => 'a', 20 => 'b', 30 => 'c', 40 => 'd', 50 => 'e'];
$result = array_chunk($array, 2, true);
print_r($result);
?>
输出结果:
Array
(
[10] => Array
(
[0] => a
[1] => b
)
[20] => Array
(
[0] => c
[1] => d
)
[30] => Array
(
[0] => e
)
)
在这个例子中,$preserve_keys 被设置为 true,因此返回的数组保留了原始数组中的键名:10, 20, 30。
当 $preserve_keys 设置为 false 时,返回的新数组的键名是连续的。也就是说,新的数组将从 0 开始,并以连续的数字进行编号。
当 $preserve_keys 设置为 true 时,返回的新数组将保留原始的键名,因此新数组的键名可能不是连续的,而是与原始数组中相应分割部分的键名一致。
array_chunk 的行为取决于 $preserve_keys 参数:
默认情况下($preserve_keys = false),新数组的键名是连续的,从 0 开始。
如果设置 $preserve_keys = true,新数组将保留原始数组的键名。
如果您需要一个连续的数字键名,您应该将 $preserve_keys 设置为 false,否则可以保留原始键名。