通过键值获取PHP中的对象
我有一个非常大的对象,我必须通过循环才能得到一个特定的对象。 我尝试了通过键值获取PHP中的对象,php,Php,我有一个非常大的对象,我必须通过循环才能得到一个特定的对象。 我尝试了foreach($obj作为$item),foreach($obj作为$item=>$value)和的各种配置 我想获取类“表响应”的所有对象。 我的元素如下所示(在JSON中): 我希望得到的结果是: { "class":"table-responsive", "html":"Gotcha!" } 可能有多个对象具有“表响应”类,因此如果有多个对象: [ { "class":"tab
foreach($obj作为$item)
,foreach($obj作为$item=>$value)
和的各种配置
我想获取类“表响应”的所有对象。
我的元素如下所示(在JSON中):
我希望得到的结果是:
{
"class":"table-responsive",
"html":"Gotcha!"
}
可能有多个对象具有“表响应”类,因此如果有多个对象:
[
{
"class":"table-responsive",
"html":"Gotcha!"
},
{
"class":"table-responsive",
"html":"Gotcha!"
}
]
我试图完成一个函数,该函数遍历所有元素并检查类的键是否等于“table responsive”,如果是,则将对象推送到数组中。(array\u push($result,$obj);
)如果当前元素是一个数组,也可以循环遍历它。可以有很多维度,因此理想情况下函数会自行调用。(递归)您所追求的是递归reduce操作。可以
迭代元素
捕获任何具有匹配属性的对象,以及
对任何子项执行相同的操作
//将JSON解码为关联数组
$data=json_decode($json,true);
//设置搜索参数
$findKey='class';
$findValue=‘表响应’;
//创建递归减速器
$reducer=函数($carry,$item)使用(&$reducer,$findKey,$findValue){
如果(数组\u键\u存在($findKey,$item)&&$item[$findKey]===$findValue){
//如果此$item匹配,则将其添加到$carry数组中
$carry[]=$item;
}
如果(!空($item['children'])){
//此$item包含子项,因此可以深入查看
返回数组_reduce($item['children',$reducer,$carry);
}
//此迭代中没有子代,因此继续到下一个迭代
返回$carry;
};
//在顶部运行减速器。
//注意,我已经将根对象包装在一个数组中,以便reducer可以对其进行迭代
$found=array_reduce([$data],$reducer,[]);
//展示
echo json_encode($found,json_PRETTY_PRINT);
演示~“我试图完成一个功能”,然后您应该向我们展示:)您的方法很好,那么您到底有什么问题?如果您的表响应的分类对象中有子对象,是否应该将其保留在结果中?找到的对象中的哪些属性应该出现在结果中?非常感谢。我明天要测试ist,看起来是对的。谢谢你的互动例子。我真的很感谢你的帮助。这是我第一次在这里发帖,所以我很高兴得到这么好的答案。在这里,我会尽力寻找我能帮忙的事情。保持安全,度过美好的一天;-)
[
{
"class":"table-responsive",
"html":"Gotcha!"
},
{
"class":"table-responsive",
"html":"Gotcha!"
}
]