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

在PHP Laravel中如何按regions的id字段过滤多层结构JSON数据

Laravel 按regions数组id筛选数据解决方案

分两种常见场景处理:

场景1:已获取完整regions数组,在内存中筛选

直接用Laravel自带的集合类处理即可,示例代码如下:

// 假设你已经将原始JSON转为了PHP数组
$originalRegions = json_decode($yourJsonString, true)['regions'];
$targetId = 2; // 要筛选的region id

// 筛选逻辑
$filteredRegions = collect($originalRegions)
    ->filter(fn($region) => $region['id'] == $targetId)
    ->values() // 重置数组索引,避免返回时保留原索引出现键名异常的问题
    ->toArray();

// 最终返回格式和你要求的一致
return response()->json([
    'regions' => $filteredRegions
]);

如果只需要取单条匹配的region,可以简化写法:

$matchedRegion = collect($originalRegions)->firstWhere('id', $targetId);
return response()->json([
    'regions' => [$matchedRegion]
]);

场景2:数据从数据库Eloquent查询而来,直接在查询阶段筛选(性能更好)

如果你有Region和Area两个关联模型,其中Region模型已经定义了areas关联:

// Region 模型中定义的关联
public function areas()
{
    return $this->hasMany(Area::class);
}

直接在查询时过滤即可,不需要查全部数据再筛选:

$targetId = 2;
$filteredRegions = Region::where('id', $targetId)
    ->with('areas') // 预加载关联的areas数据,避免N+1查询
    ->get()
    ->toArray();

return response()->json([
    'regions' => $filteredRegions
]);

两种方式返回的结果都和你要求的输出格式完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 14:33:00