首页 > 解决方案 > Laravel Blade 的 toArray() 和 json_decode() 之间的区别

问题描述

当简单地返回 $users 时,我使用 toArray() 和 json_decode() 得到完全相同的结果。但是在我的视图中循环 $users 时,我使用 toArray() 方法得到一个错误('尝试获取非对象的属性'xxx')。不使用 json_decode()。知道为什么吗?我在 Laravel 6 上。

   $client = HttpClient::create();
   $response = $client->request('GET', 'https://jsonplaceholder.typicode.com/users');
   $users = json_decode($response->getContent());
// $users = $response->toArray();
   return $users;

标签: jsonlaravel

解决方案


toArray() 方法返回纯数组。虽然 json_decode() 键始终是字符串,而值可以是字符串、数字、真或假、null 甚至是对象或数组。

因此,您尝试访问由 json_decode 返回的对象,如果您在编码时有对象,则该对象有效。但是,当尝试从数组的角度访问对象时,它不会工作,因为数组是普通数组。

Json_decode()的解释

PHP 的 json_decode 函数接受一个 JSON 字符串并将其转换为 PHP 变量。通常,JSON 数据将表示一个 JavaScript 数组或对象字面量,json_decode 会将其转换为 PHP 数组或对象。

解释 PHP 数组超出了这个范围。然而:

PHP 中的数组实际上是一个有序映射。映射是将值与键相关联的类型。这种类型针对几种不同的用途进行了优化;它可以被视为数组、列表(向量)、哈希表(映射的实现)、字典、集合、堆栈、队列等等。由于数组值可以是其他数组,因此树和多维数组也是可能的。

最后,您正在尝试访问 json_decode 返回的对象 - 工作正常。但是数组不会保存对象,因此它会抛出试图获取非对象的属性。


推荐阅读