Laravel和JSON的回应

时间:2014-06-19 23:21:21

标签: php json laravel

我有JSON响应,如下所示:

{
    "success": true,
    "ownersList": [
       { "propertiesList": [],
         "email": "email@email.com"  },
       { "propertiesList": [],
         "email": "email2@email.com" }
    ]
}

如何获取与特定“电子邮件”值相关联的所有propertiesList

3 个答案:

答案 0 :(得分:0)

我认为Laravel不需要任何花哨的东西来做这件事。您可能希望使用Guzzle(这是一个Laravel依赖项),因为它是PHP的简单CURL包装器。

// assumes the API response is in variable $api_response_body_as_a_string
$o_api_response = json_decode($api_response_body_as_a_string);
$owners_list = $o_api_response->owners_list;
$propertiesList = NULL;
foreach($owners_list as $this_owner) {
    if('email@to.find' === $this_owner->email) {
        $propertiesList = $this_owner->$propertiesList;
        break;
    }
}
// $propertiesList has the result or is NULL

原始问题(在OP澄清之前):

你目前在你的问题中没有任何与Laravel相关的代码,所以我猜测你正在查询一个表,其中propertiesList是ownersList模型的外键: http://laravel.com/docs/eloquent#eager-loading

否则,有必要提供有关您的设置(模型和关系)的更多信息,以帮助您。

答案 1 :(得分:0)

您可以尝试这样的事情:

$obj = json_decode($json);
$item = null;
array_walk($obj->ownersList, function($i) use (&$item) {
    if($i->email == 'email@email.com') $item = $i;
});

// Print out the item
dd($item);

我使用过硬编码'email@email.com',您可以使用变量或其他任何东西。

答案 2 :(得分:0)

我意识到这个问题很老了并且已经得到了解答,但是Laravel的一个很好的清洁方法就是做一些事情:

$json = json_decode($response, true);

$properties = collect($json['ownersList'])
    ->where('email', 'email@email.com')
    ->pluck('propertiesList')->all();

在内部,这与其他问题类似,但它更流畅,更容易阅读和理解。

有关详细信息,请参阅Collection documentation