我有一个返回JSON的API函数,我这样调用它以转换为对象:
$objParts = json_decode(file_get_contents("http://example.com/api/GetPartTypes"));
这是print_r($objParts)
的结果:
stdClass Object
(
[parttype] => Array
(
[0] => stdClass Object
(
[id] => 103
[desc] => Spoiler Valance, Fr
[l1] => Body & Frame
[l2] => Exterior/Interior Trim
)
[1] => stdClass Object
(
[id] => 104
[desc] => Grille
[l1] => Body & Frame
[l2] => Hood
)
[2] => stdClass Object
(
[id] => 105
[desc] => Bumper Assy, Front
[l1] => Body & Frame
[l2] => Hood
)
)
)
我希望能够仅返回id
与称为$parttype
的参数匹配的“对象”,而不使用foreach()
循环。
($objParts
包含400多个项目)
我知道array_search()
,但不确定在上述情况下如何使用它。这不起作用:
$parttype = 104;
$val = array_search($parttype, $objParts);
答案 0 :(得分:1)
如果您使用的是PHP 7及更高版本,则可以在对象上使用array_column()
,因此只需添加...
$objParts = json_decode(file_get_contents("t.json"));
print_r($objParts);
$parttype = 104;
$item = array_search($parttype, array_column($objParts->parttype, "id"));
echo $objParts->parttype[$item]->desc;
答案 1 :(得分:0)
对于PHP 5x(非7),您必须将数组与函数一起使用,因此这是一种达到此结果的方法。
在关联数组模式下将array_column
与array_search
和json_decode
混合在一起:
$objParts = json_decode($yourjson,true); // include 'true' here
$parttype = 104;
$val = array_search($parttype, array_column($objParts['parttype'], 'id'));
// $val will be '1' in this example
$found = $objParts['parttype'][$val];
要将其转换回stdClass对象:
$found = (object)$objParts['parttype'][$val];
结果:
stdClass对象 ( [id] => 104 [desc] =>格栅 [l1] =>身体和框架 [l2] =>胡德 )