You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP使用array_slice截取嵌套数组country_id子元素并保留原键的方法

你需要全局遍历所有country_id下的子元素累加计数,按需求截取指定范围的元素,同时保留所有层级的原有键名。以下是PHP实现代码:

function sliceCountryId($originData, $offset, $length) {
    $result = [];
    $currentCount = 0; // 累计已遍历的country_id子元素数量
    $targetEnd = $offset + $length;

    foreach ($originData as $dateKey => $dateItem) {
        if (!isset($dateItem['country_id']) || !is_array($dateItem['country_id'])) {
            continue;
        }
        $countryList = $dateItem['country_id'];
        $countryNum = count($countryList);

        // 计算当前批次需要截取的起始和长度
        $currentOffset = max(0, $offset - $currentCount);
        $currentLength = $targetEnd - $currentCount - $currentOffset;

        if ($currentLength <= 0) {
            break;
        }

        // 截取country_id,保留原有键
        $slicedCountry = array_slice($countryList, $currentOffset, $currentLength, true);
        if (!empty($slicedCountry)) {
            $result[$dateKey] = [
                'country_id' => $slicedCountry
            ];
        }

        $currentCount += $countryNum;
        if ($currentCount >= $targetEnd) {
            break;
        }
    }

    return $result;
}

调用示例

  1. 取前6个country_id元素:
$newData = sliceCountryId($data, 0, 6);
  1. 取第3到第9个country_id元素(对应偏移从2开始,共7个元素):
$newData = sliceCountryId($data, 2, 7);

说明

  • array_slice的第四个参数设为true,保证保留country_id下的原有数字键名不会被重置
  • 外层日期键完全保留原有取值,不会修改结构
  • 原数组中2021-06-25项存在重复键21,属于PHP数组本身的特性,重复键会被后定义的值覆盖,处理时会自动按照PHP解析后的实际元素计数

内容的提问来源于stack exchange,提问作者NewUser

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 18:36:03