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; }
调用示例
- 取前6个
country_id元素:
$newData = sliceCountryId($data, 0, 6);
- 取第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
相关产品推荐
相关产品推荐

