如何过滤JSON数据行并展示指定分类用户?PHP代码排障
解决PHP批量过滤JSON用户数据的问题
我明白你现在的需求是从users.json里批量筛选出指定分类(比如cat为1和2)的用户,同时解决现有代码只能返回单个匹配项、甚至出现白屏的问题。咱们先拆解下现有代码的核心问题:
- 你的
searchArray函数找到第一个匹配项就直接return了,所以只能拿到单个用户,没法遍历所有用户做批量筛选 - 如果
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
相关产品推荐
相关产品推荐

