所以我读了它以将数组转换为对象,我可以简单地(object)
在变量前使用$my_obj = (object) $my_array
. 话虽如此,为什么在执行下面的代码时会出现以下错误。
注意试图在第 26 行获取非对象的属性
我不应该能够通过使用访问对象的属性$car->make
吗?
<?php
$cars = array(
array(
'make' => 'Audi',
'model' => 'A4',
'year' => '2014',
),
array(
'make' => 'Benz',
'model' => 'c300',
'year' => '2015',
),
array(
'make' => 'BMW',
'model' => 'i8',
'year' => '2016',
),
);
// Convert $cars array to object
$cars = (object) $cars;
foreach ($cars as $car) {
// Shouldn't I be able to access my object
print $car->make . "<br>";
}
Run Code Online (Sandbox Code Playgroud)
你有一个多维数组。通过调用$cars = (object) $cars;
您基本上创建以下对象:
$cars = {
'0' => [
'make' => 'Audi',
'model' => 'A4',
'year' => '2014'
],
'1' => [
'make' => 'Benz',
'model' => 'c300',
'year' => '2015'
],
'2' => [
'make' => 'BMW',
'model' => 'i8',
'year' => '2016'
]
};
Run Code Online (Sandbox Code Playgroud)
内部数组仍然是数组。您想要做的是将内部数组转换为对象,同时让外部数组成为数组。这可以通过函数来完成array_map
:
$cars = array_map(function($array){
return (object)$array;
}, $cars);
Run Code Online (Sandbox Code Playgroud)
这将创建您想要的输出。
$cars = [
{
'make' => 'Audi',
'model' => 'A4',
'year' => '2014'
},
{
'make' => 'Benz',
'model' => 'c300',
'year' => '2015'
},
{
'make' => 'BMW',
'model' => 'i8',
'year' => '2016'
}
];
Run Code Online (Sandbox Code Playgroud)