我有JSON响应,如下所示:
{
"success": true,
"ownersList": [
{ "propertiesList": [],
"email": "email@email.com" },
{ "propertiesList": [],
"email": "email2@email.com" }
]
}
如何获取与特定“电子邮件”值相关联的所有propertiesList
?
答案 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。