截取

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] => 紫
)

results matching ""

    No results matching ""