将关联数组转换为类似于Eloquent查询集合的集合

时间:2017-09-14 14:31:47

标签: php arrays laravel collections

我有一个接收API数据的类,我想将所有响应包装到一个集合类中。因此,我从API调用接收数据,将其转换为普通的关联php数组,并使用collect()帮助程序将其包装。

我有一半期待它像Eloquent那样工作,你可以将一个密钥作为集合属性引用,但它没有。

以下是我将收到的回复数据示例:

$data = [
    'status' => 'SUCCESS',
    'message' => 'Your request was received.',
    'data' => [
        'first_name' => 'John',
        'last_name' => 'Doe',
        'address' => [
            'street' => '123 Main St.',
            'city' => 'Any City',
            'state' => 'TX',
            'zip' => '12345',
            'country' => 'USA'
        ],
        'email' => 'john@doe.com',
        'phone' => '(123) 456-7890',
        'role' => 'Administrator',
        'active_orders' => 3
    ]
];

$response = collect($data);

我希望能够将这些数据包装在一个集合中并像这样使用它:

$response->data->address->street$response->data->first_name

然而,我收到一条错误消息Property [data] does not exist on this collection instance.如果我想访问它,我必须像数组一样引用它。例如。 $response['data']['first_name']。如果我想使用该语法,我会将其保留为数组。

如何递归设置我的集合属性作为数组键名,这样我可以像使用Eloquent查询一样使用它?

1 个答案:

答案 0 :(得分:1)

  

如何递归设置我的集合属性作为数组键名,这样我可以像使用Eloquent查询一样使用它?

json_decode()通常会解构为这样的对象。但是你需要从JSON开始。所以,它似乎很愚蠢,而且可能效率不高,但这应该做你想要的:

$response = json_decode(json_encode($data));