当前位置: 首页> 最新文章列表> 使用 array_slice 做 API 返回结果的 mock 数据

使用 array_slice 做 API 返回结果的 mock 数据

gitbox 2025-05-26

array_slice 是 PHP 内置的数组操作函数,功能是从一个数组中根据指定的起始位置和长度,提取一部分数组元素并返回一个新数组。它的基本语法如下:

array_slice(array $array, int $offset, ?int $length = null, bool $preserve_keys = false): array
  • $array:需要操作的原数组;

  • $offset:起始位置,支持负数(从数组末尾开始计数);

  • $length:截取长度,默认到数组末尾;

  • $preserve_keys:是否保留原数组的键名,默认为 false

如何利用 array_slice 生成 mock 数据?

假设我们已经有一份完整的模拟数据集,比如一个用户列表数组,现在我们想实现分页效果,模拟后端 API 返回部分数据。利用 array_slice,只需指定分页的起始索引和每页数量即可轻松截取所需数据片段。

示例如下:

<?php

// 完整模拟用户数据
$users = [
    ['id' => 1, 'name' => 'Alice', 'email' => '[email protected]'],
    ['id' => 2, 'name' => 'Bob', 'email' => '[email protected]'],
    ['id' => 3, 'name' => 'Charlie', 'email' => '[email protected]'],
    ['id' => 4, 'name' => 'David', 'email' => '[email protected]'],
    ['id' => 5, 'name' => 'Eve', 'email' => '[email protected]'],
    ['id' => 6, 'name' => 'Frank', 'email' => '[email protected]'],
];

// 模拟分页参数,假设当前页和每页条数
$page = 2;
$pageSize = 2;

// 计算起始索引
$offset = ($page - 1) * $pageSize;

// 使用 array_slice 截取数据
$pageData = array_slice($users, $offset, $pageSize);

// 生成模拟 API 返回格式
$response = [
    'code' => 0,
    'msg' => 'success',
    'data' => $pageData,
];

// 输出 JSON
header('Content-Type: application/json');
echo json_encode($response, JSON_PRETTY_PRINT);

该示例中,array_slice 按照当前页码计算起始位置,从 $users 数组中截取相应数量的用户数据,构造出符合接口返回规范的 JSON 格式,方便前端调用和调试。

结合 URL 的实际场景

在实际项目中,接口可能包含基于 URL 参数的分页请求,如:

https://api.gitbox.net/users?page=2&pageSize=3

我们可以通过 PHP 解析 $_GET 参数来动态控制返回的数据切片:

<?php
// 假设已有完整数据
$users = [/* 上面相同的数据 */];

// 获取分页参数,设置默认值
$page = isset($_GET['page']) ? max(1, intval($_GET['page'])) : 1;
$pageSize = isset($_GET['pageSize']) ? max(1, intval($_GET['pageSize'])) : 3;

$offset = ($page - 1) * $pageSize;

$pageData = array_slice($users, $offset, $pageSize);

$response = [
    'code' => 0,
    'msg' => 'success',
    'data' => $pageData,
];

header('Content-Type: application/json');
echo json_encode($response, JSON_PRETTY_PRINT);

通过这种方式,可以用简单且高效的 array_slice 实现分页模拟,满足前端接口测试需求。