李涛自留地
回到顶部
首页 > php学习 > PHP array_slice() 和 array_splice() 详解:数组切片与截取

PHP array_slice() 和 array_splice() 详解:数组切片与截取

文章目录

分页功能中需要从数组中截取一页的数据。array_slice()和 array_splice() 都能做到,但一个返回新数组,一个修改原数组。这篇文章把这两个函数的区别和使用场景理清楚。

array_slice()基本用法

array_slice(array, offset, length) - 从数组中取出一段,返回新数组,不修改原数组。

<?php
$items = ['A', 'B', 'C', 'D', 'E'];

// 取第2个到第4个元素(索引1开始,取3个)
$slice = array_slice($items, 1, 3);
print_r($slice);  // ['B', 'C', 'D']

// 取前3个
print_r(array_slice($items, 0, 3));  // ['A', 'B', 'C']

// 取后2个(offset为负)
print_r(array_slice($items, -2));  // ['D', 'E']
?>

保留键名 vs 重置键名

<?php
$arr = [5 => 'a', 10 => 'b', 15 => 'c'];

// 保留键名
print_r(array_slice($arr, 0, 2, true));
// Array ( [5] => a [10] => b )

// 重置键名(默认)
print_r(array_slice($arr, 0, 2));
// Array ( [0] => a [1] => b )
?>

array_splice() 基本用法

array_splice(array, offset, length, replacement) - 从数组中删除一段,可以替换,修改原数组。

<?php
$items = ['A', 'B', 'C', 'D', 'E'];

// 删除第2个到第3个元素
$removed = array_splice($items, 1, 2);
print_r($removed);  // ['B', 'C']
print_r($items);    // ['A', 'D', 'E']

// 替换
array_splice($items, 1, 1, ['X', 'Y']);
print_r($items);  // ['A', 'X', 'Y', 'D', 'E']
?>

array_slice() vs array_splice() 对比

特性array_slice()array_splice()

原数组不修改修改
返回值返回截取的新数组返回被删除的元素
替换不支持支持 replacement 参数
分页✅ 首选不推荐
删除元素不推荐✅ 首选

实战场景

场景1:分页截取

<?php
$all_posts = get_all_posts();  // 假设返回1000条
$page = 2;
$per_page = 10;

$start = ($page - 1) * $per_page;
$posts = array_slice($all_posts, $start, $per_page);
?>

场景2:删除数组最后一个元素

<?php
$values = [1, 2, 3, 4, 5];
array_splice($values, -1);  // 删除最后一个
echo implode(', ', $values);  // 1, 2, 3, 4
?>

场景3:替换数组头部

<?php
$tags = ['old1', 'old2', 'new1', 'new2'];
array_splice($tags, 0, 2, ['replaced']);
print_r($tags);  // ['replaced', 'new1', 'new2']
?>

若非作者标注皆为李涛自留地原创文章,转载或复制请以超链接形式并注明出处。