PHP array_search需要帮助

时间:2018-07-13 15:48:24

标签: php

我有一个返回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);

2 个答案:

答案 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_columnarray_searchjson_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] =>胡德   )