将数组转换为 PHP 中的对象

OhD*_*vey 0 php arrays object

所以我读了它以将数组转换为对象,我可以简单地(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)

Phi*_*rer 5

你有一个多维数组。通过调用$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)