TreeviewCopyright © aleen42 all right reserved, powered by aleen42
截取
array_chunk — 将一个数组分割成多个
语法
array array_chunk( array $input, int $size[, bool $preserve_keys = false] )
描述
- 将一个数组分割成多个数组,其中每个数组的单元数目由 size 决定。最后一个数组的单元数目可能会少于 size 个
参数
参数 | 描述 |
---|---|
input | 需要操作的数组 |
size | 每个数组的单元数目 |
preserve_keys | 设为 TRUE,可以使 PHP 保留输入数组中原来的键名。如果你指定了 FALSE,那每个结果数组将用从零开始的新数字索引。默认值是 FALSE。 |
返回值
- 得到的数组是一个多维数组中的单元,其索引从零开始,每一维包含了 size 个元素
举例
// 示例1-不保留索引
$chunk_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_chunk($chunk_array, 3);
print_r($result);
// 结果
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[0] => 4
[1] => 5
[2] => 6
)
[2] => Array
(
[0] => 7
[1] => 8
[2] => 9
)
[3] => Array
(
[0] => 10
)
)
// 示例2-保留索引
$chunk_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_chunk($chunk_array, 3, true); // 第三个参数,保持了原来的索引
print_r($result);
// 结果
Array
(
[0] => Array
(
[0] => 1
[1] => 2
[2] => 3
)
[1] => Array
(
[3] => 4
[4] => 5
[5] => 6
)
[2] => Array
(
[6] => 7
[7] => 8
[8] => 9
)
[3] => Array
(
[9] => 10
)
)
array_slice — 从数组中取出一段
语法
array array_slice( array $array, int $offset[, int $length = NULL[, bool $preserve_keys = false]] )
描述
- array_slice() 返回根据 offset 和 length 参数所指定的 array 数组中的一段序列
参数
参数 | 描述 |
---|---|
array | 输入的数组 |
offset | 如果 offset 非负,则序列将从 array 中的此偏移量开始。如果 offset 为负,则序列将从 array 中距离末端这么远的地方开始 |
length | 如果给出了 length 并且为正,则序列中将具有这么多的单元。如果给出了 length 并且为负,则序列将终止在距离数组末端这么远的地方。如果省略,则序列将从 offset 开始一直到 array 的末端 |
preserve_keys | 注意 array_slice() 默认会重新排序并重置数组的数字索引。你可以通过将 preserve_keys 设为 TRUE 来改变此行为 |
返回值
- 返回其中一段
举例
// 示例1-正常使用
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 0, 2);
print_r($result);
// 结果
Array
(
[0] => 1
[1] => 2
)
// 示例2-注意少了个10,说明length无论正负都是具体游标位置的绝对值,这里-1是指距离最后一个元素1个位置,也就是9的位置
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 0, -1);
print_r($result);
// 结果
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
)
// 示例3-获取全部,相当于不截取,第二个参数不传或传null,结果一致
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 0, null);
$result = array_slice($slice_array, 0);
print_r($result);
// 结果
Array
(
[0] => 1
[1] => 2
[2] => 3
[3] => 4
[4] => 5
[5] => 6
[6] => 7
[7] => 8
[8] => 9
[9] => 10
)
// 示例4-截取中间位置的元素
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 4, 3);
print_r($result);
// 结果
Array
(
[0] => 5
[1] => 6
[2] => 7
)
// 示例5-length为负值
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 4, -2);
print_r($result);
// 结果
Array
(
[0] => 5
[1] => 6
[2] => 7
[3] => 8
)
// 示例6-保持原来的索引
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 3, 2, true);
print_r($result);
// 结果
Array
(
[3] => 4
[4] => 5
)
//从上面可以看出,所有的offset和length都是移动游标的结果,比如,如果offset为2,那么头部游标从值为1的左侧移动到3和4之间,如果length为3,那么结尾游标从10的右侧移动到7和8之间
// 示例7-分析开始游标和结束游标位置互换,也就是说结束游标在前,开始游标在后的情况
$slice_array = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
$result = array_slice($slice_array, 6, -4, true);
print_r($result);
// 结果
Array
(
)
//从上面看出,如果出现了结束游标在前,开始游标在后的情况,则匹配不到相关的数据
array_splice — 把数组中的一部分去掉并用其它值取代
语法
array array_splice( array &$input, int $offset[, int $length = 0[, mixed $replacement]] )
描述
- 把 input 数组中由 offset 和 length 指定的单元去掉,如果提供了 replacement 参数,则用其中的单元取代
- 注意 input 中的数字键名不被保留
参数
参数 | 描述 |
---|---|
input | 输入的数组 |
offset | 如果 offset 为正,则从 input 数组中该值指定的偏移量开始移除。如果 offset 为负,则从 input 末尾倒数该值指定的偏移量开始移除 |
length | 如果省略 length,则移除数组中从 offset 到结尾的所有部分。如果指定了 length 并且为正值,则移除这么多单元。如果指定了 length 并且为负值,则移除从 offset 到数组末尾倒数 length 为止中间所有的单元。小窍门:当给出了 replacement 时要移除从 offset 到数组末尾所有单元时,用 count($input) 作为 length |
replacement | 如果给出了 replacement 数组,则被移除的单元被此数组中的单元替代。如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置。 注意替换数组中的键名不保留。如果用来替换 replacement 只有一个单元,那么不需要给它加上 array(),除非该单元本身就是一个数组、一个对象或者 NULL. |
返回值
- 返回一个包含有被移除单元的数组,原数组改变了,包含的是移除相关元素后的数组
举例
// 示例1-如果省略 length,则移除数组中从 offset 到结尾的所有部分
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array,0);
print_r($result);
print_r($splice_array);
// 结果
Array
(
[0] => 红
[1] => 黄
[2] => 蓝
[3] => 绿
[4] => 青
[5] => 橙
[6] => 紫
)
Array
(
)
// 示例2-正常用法
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array,2,3);
print_r($result);
print_r($splice_array);
// 结果
Array
(
[0] => 蓝
[1] => 绿
[2] => 青
)
Array
(
[0] => 红
[1] => 黄
[2] => 橙
[3] => 紫
)
// 示例3-length为负数
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array,0,-1);
print_r($result);
print_r($splice_array);
// 结果
Array
(
[0] => 红
[1] => 黄
[2] => 蓝
[3] => 绿
[4] => 青
[5] => 橙
)
Array
(
[0] => 紫
)
// 示例4-length为负数
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array,5,-2);
print_r($result);
print_r($splice_array);
// 结果
Array
(
)
Array
(
[0] => 红
[1] => 黄
[2] => 蓝
[3] => 绿
[4] => 青
[5] => 橙
[6] => 紫
)
从上面三个结果可以看出offset和length与array_slice用法一致,下面看replacement的用法
// 示例5-替换
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array,0,2,'颜色');
print_r($result);
print_r($splice_array);
// 结果
Array
(
[0] => 红
[1] => 黄
)
Array
(
[0] => 颜色
[1] => 蓝
[2] => 绿
[3] => 青
[4] => 橙
[5] => 紫
)
// 从上面看出,红和黄整体被替换成了颜色
// 示例6-如果 offset 和 length 的组合结果是不会移除任何值,则 replacement 数组中的单元将被插入到 offset 指定的位置,这里offset为null,所以会插入到头部
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array,null,null,'颜色');
print_r($result);
print_r($splice_array);
// 结果
Array
(
)
Array
(
[0] => 颜色
[1] => 红
[2] => 黄
[3] => 蓝
[4] => 绿
[5] => 青
[6] => 橙
[7] => 紫
)
// 示例7-如果用来替换 replacement 只有一个单元,那么不需要给它加上 array()
// 下面这两种结果是一致的
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array, null, null, ['颜色1']);
$result = array_splice($splice_array, null, null, '颜色1'); //这两种方式结果是一样的
print_r($result);
print_r($splice_array);
// 结果
Array
(
)
Array
(
[0] => 颜色1
[1] => 红
[2] => 黄
[3] => 蓝
[4] => 绿
[5] => 青
[6] => 橙
[7] => 紫
)
// 示例8-如果replacement是个数组,则将数组中的元素插入到offset位置
$splice_array = ['红', '黄', '蓝', '绿', '青', '橙', '紫'];
$result = array_splice($splice_array, null, null, ['颜色1','颜色2']);
print_r($result);
print_r($splice_array);
// 结果
Array
(
)
Array
(
[0] => 颜色1
[1] => 颜色2
[2] => 红
[3] => 黄
[4] => 蓝
[5] => 绿
[6] => 青
[7] => 橙
[8] => 紫
)