通过键值获取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!"
        }
    ]