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

PHP对象数组键值对比问题:筛选未匹配对象的函数错误排查

解决方法:筛选未被回答的$input对象

我来帮你排查这个问题,顺便给出可靠的解决方案~

首先明确你的核心需求:从$input数组中,仅保留那些**id值没有出现在$answers数组任意对象的answer_of字段**中的对象,匹配到的对象直接忽略。

常见错误原因排查

你的unanswered2函数可能出错的点一般有这几个:

  • 判断逻辑写反了:比如误把「不在列表中」写成了「在列表中」
  • 对象属性访问错误:比如用数组下标$item['id']访问对象属性,正确应该是$item->id
  • 遍历效率低且易漏判:每次遍历$input时都重新遍历$answers对比,可能出现循环逻辑漏洞

正确实现方案

推荐先提取$answers中所有已回答的answer_of值到一个集合,再用array_filter过滤$input,逻辑清晰且高效:

// 第一步:提取$answers中所有answer_of的值,生成已回答ID集合
$answeredIds = array_map(function($answer) {
    return $answer->answer_of;
}, $answers);

// 第二步:过滤$input,保留id不在已回答集合中的对象
$unansweredItems = array_filter($input, function($item) use ($answeredIds) {
    return !in_array($item->id, $answeredIds);
});

针对你的示例数据的测试结果

你的$input对象id为2,而$answers中有一个对象的answer_of正好是2,所以执行上述代码后,$unansweredItems会是空数组,完全符合「忽略已匹配对象」的需求。

额外提示

如果需要保留原数组的键名,可以给array_filter传第三个参数ARRAY_FILTER_USE_BOTH,不过一般场景下默认的索引重置就够用了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:12:57