当前位置: 首页> 最新文章列表> array_chunk 返回的数组键名是连续的,可以吗?

array_chunk 返回的数组键名是连续的,可以吗?

M66 2025-04-25

在 PHP 中,array_chunk 是一个非常实用的函数,可以将一个大数组分割成多个小数组,并且它还允许我们定义每个小数组的最大长度。

函数签名如下:

array_chunk(array $array, int $length, bool $preserve_keys = false): array
  • $array:输入的数组。

  • $length:每个分割数组的长度。

  • $preserve_keys:如果设置为 true,则返回的数组将保留原数组的键名;如果为 false,则返回的数组会重新生成连续的数字键名。

1. array_chunk 后返回的新数组键名保持不变吗?

默认情况下,array_chunk 会根据第三个参数 $preserve_keys 来决定是否保留原数组的键名:

  • $preserve_keys 设置为 false(默认值)时,返回的新数组将使用连续的数字键名,从 0 开始。

  • $preserve_keys 设置为 true,新数组将保留原数组的键名。

示例:$preserve_keysfalse

<?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 等键名。

示例:$preserve_keystrue

<?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

2. array_chunk 返回的新数组的键名是连续的吗?

  • $preserve_keys 设置为 false,返回的新数组的键名是连续的。也就是说,新的数组将从 0 开始,并以连续的数字进行编号。

  • $preserve_keys 设置为 true,返回的新数组将保留原始的键名,因此新数组的键名可能不是连续的,而是与原始数组中相应分割部分的键名一致。

3. 总结

array_chunk 的行为取决于 $preserve_keys 参数:

  • 默认情况下($preserve_keys = false),新数组的键名是连续的,从 0 开始。

  • 如果设置 $preserve_keys = true,新数组将保留原始数组的键名。

如果您需要一个连续的数字键名,您应该将 $preserve_keys 设置为 false,否则可以保留原始键名。