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

如何过滤JSON数据行并展示指定分类用户?PHP代码排障

解决PHP批量过滤JSON用户数据的问题

我明白你现在的需求是从users.json里批量筛选出指定分类(比如cat为1和2)的用户,同时解决现有代码只能返回单个匹配项、甚至出现白屏的问题。咱们先拆解下现有代码的核心问题:

  1. 你的searchArray函数找到第一个匹配项就直接return了,所以只能拿到单个用户,没法遍历所有用户做批量筛选
  2. 如果searchArray没找到匹配的用户,会返回null,这时候访问$user['cat']会触发致命错误,直接导致白屏

下面是修正后的完整代码,能实现批量过滤并展示指定分类的用户:

<?php
// 读取JSON文件内容
$str = file_get_contents('http://localhost/json/users.json');
// 解码为关联数组
$json = json_decode($str, true);

// 检查JSON解码是否成功(避免文件读取失败或格式错误导致白屏)
if (json_last_error() !== JSON_ERROR_NONE) {
    die('JSON解码失败:' . json_last_error_msg());
}

// 定义要筛选的目标分类数组
$targetCats = ["1", "2"];
// 安全获取所有用户列表(避免数组索引不存在报错)
$allUsers = $json['data'][0]['users']['data'] ?? [];

// 批量筛选符合条件的用户
$filteredUsers = [];
foreach ($allUsers as $user) {
    // 先检查cat字段是否存在,再判断是否在目标分类中
    if (isset($user['cat']) && in_array($user['cat'], $targetCats)) {
        $filteredUsers[] = $user;
    }
}

// 输出筛选结果
if (!empty($filteredUsers)) {
    echo "符合条件的用户信息:<br>";
    foreach ($filteredUsers as $user) {
        echo "用户名:{$user['name']},Instagram:{$user['description']['data'][0]['instagram']}<br>";
    }
} else {
    echo "没有找到符合指定分类的用户";
}
?>

关键优化点说明:

  • 增加JSON解码校验:用json_last_error()检查解码是否成功,提前拦截文件读取失败或JSON格式错误的问题
  • 替换单个匹配为批量遍历:直接遍历所有用户,把符合分类条件的用户统一收集到数组中,不再局限于单个结果
  • 字段存在性检查:用isset($user['cat'])避免用户数据缺失cat字段时触发错误
  • 友好的结果反馈:有符合条件的用户就逐个展示信息,没有的话给出明确提示

这样修改后,就能正确筛选出cat为1和2的用户(Steve、Stafin、Sara),也不会再出现白屏问题啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:32:28