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

如何用PHP移除合并后JSON中project_id为16的块

问题

我使用PHP脚本合并两个JSON文件,已得到合并后的输出结果。现需移除所有包含"project_id": 16的JSON块,请问该如何实现?

解决方案

这其实很容易实现,核心思路就是把JSON转成PHP数组后过滤掉不符合条件的元素,再转回JSON就行。我给你写个完整的示例,你可以根据自己的实际情况调整:

// 先获取合并后的JSON内容——如果是存在文件里,就用file_get_contents读取
$mergedJson = file_get_contents('merged.json');

// 将JSON解码为PHP关联数组(第二个参数true很关键,不然会得到对象)
$dataArray = json_decode($mergedJson, true);

// 用array_filter过滤掉所有project_id等于16的元素
$filteredArray = array_filter($dataArray, function($item) {
    // 先检查project_id键是否存在,避免无该键的元素引发警告
    return isset($item['project_id']) && $item['project_id'] !== 16;
});

// 可选:如果需要重置数组索引(因为array_filter会保留原索引,JSON数组不影响,但看起来更整洁)
$filteredArray = array_values($filteredArray);

// 把过滤后的数组重新编码为JSON,JSON_PRETTY_PRINT让输出格式更美观
$filteredJson = json_encode($filteredArray, JSON_PRETTY_PRINT);

// 可以选择输出结果,或者写入新文件
echo $filteredJson;
// file_put_contents('filtered_merged.json', $filteredJson);

关键点说明:

  • json_decode($mergedJson, true):一定要加第二个参数true,这样才能把JSON对象转成PHP的关联数组,方便后续操作;如果不加,得到的是stdClass对象,过滤的时候写法会略有不同(比如$item->project_id)。
  • 过滤回调里的isset($item['project_id']):这一步是为了容错——如果你的JSON里有些块没有project_id这个键,不会因为访问不存在的键而抛出警告。
  • array_values($filteredArray):array_filter会保留原数组的索引,比如过滤掉第二个元素后,数组索引会是0、2...,虽然JSON数组不关心索引顺序,但重置后索引连续,看起来更规范,属于可选操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:12:51