如何使用stdClass()将数组转换为对象

Ale*_*drw 99 php arrays stdclass

我做了以下数组:

$clasa = array(
        'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
        'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
        'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
        'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
        'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
Run Code Online (Sandbox Code Playgroud)

我想知道如何使用stdClass()将这个数组转换为一个对象,我是一个PHP初学者,一个简单的例子会非常有帮助,我试过寻找类似的问题,但答案很复杂,超越了我对基本类和对象的理解.

Ekr*_*que 201

您只需添加此代码即可

$clasa = (object) array(
            'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
            'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
            'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
            'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
            'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
);
Run Code Online (Sandbox Code Playgroud)

如果你想看到这个stdClass对象只是调用它

print_r($clasa);
Run Code Online (Sandbox Code Playgroud)

如果要将数组转换为对象代码即可

$arr = array('a'=>'apple','b'=>'ball');
$arr = (object) $arr;
Run Code Online (Sandbox Code Playgroud)

您不需要使用stdClass.它会自动转换为stdClass

  • 不适用于嵌套数组 (20认同)

h2o*_*ooo 55

快速而肮脏的方式是使用json_encode并将json_decode整个数组(包括子元素)转换为对象.

$clasa = json_decode(json_encode($clasa)); //Turn it into an object
Run Code Online (Sandbox Code Playgroud)

可以使用相同的方法将对象转换为数组.只需添加, truejson_decode返回关联的数组:

$clasa = json_decode(json_encode($clasa), true); //Turn it into an array
Run Code Online (Sandbox Code Playgroud)

另一种方式(没有脏)只是一个递归函数:

function convertToObject($array) {
    $object = new stdClass();
    foreach ($array as $key => $value) {
        if (is_array($value)) {
            $value = convertToObject($value);
        }
        $object->$key = $value;
    }
    return $object;
}
Run Code Online (Sandbox Code Playgroud)

或完整代码:

<?php
    function convertToObject($array) {
        $object = new stdClass();
        foreach ($array as $key => $value) {
            if (is_array($value)) {
                $value = convertToObject($value);
            }
            $object->$key = $value;
        }
        return $object;
    }

    $clasa = array(
            'e1' => array('nume' => 'Nitu', 'prenume' => 'Andrei', 'sex' => 'm', 'varsta' => 23),
            'e2' => array('nume' => 'Nae', 'prenume' => 'Ionel', 'sex' => 'm', 'varsta' => 27),
            'e3' => array('nume' => 'Noman', 'prenume' => 'Alice', 'sex' => 'f', 'varsta' => 22),
            'e4' => array('nume' => 'Geangos', 'prenume' => 'Bogdan', 'sex' => 'm', 'varsta' => 23),
            'e5' => array('nume' => 'Vasile', 'prenume' => 'Mihai', 'sex' => 'm', 'varsta' => 25)
    );

    $obj = convertToObject($clasa);
    print_r($obj);
?>
Run Code Online (Sandbox Code Playgroud)

输出(注意没有数组 - 只有stdClass):

stdClass Object
(
    [e1] => stdClass Object
        (
            [nume] => Nitu
            [prenume] => Andrei
            [sex] => m
            [varsta] => 23
        )

    [e2] => stdClass Object
        (
            [nume] => Nae
            [prenume] => Ionel
            [sex] => m
            [varsta] => 27
        )

    [e3] => stdClass Object
        (
            [nume] => Noman
            [prenume] => Alice
            [sex] => f
            [varsta] => 22
        )

    [e4] => stdClass Object
        (
            [nume] => Geangos
            [prenume] => Bogdan
            [sex] => m
            [varsta] => 23
        )

    [e5] => stdClass Object
        (
            [nume] => Vasile
            [prenume] => Mihai
            [sex] => m
            [varsta] => 25
        )

)
Run Code Online (Sandbox Code Playgroud)

所以你要参考它$obj->e5->nume.

DEMO

  • 这个解决方案`json_decode(json_encode($ clasa))`的优点就是使用``(对象)'将数组转换为对象,后者不会递归地执行它,因此任何内部数组都保留数组. (5认同)
  • @AmalMurali有人说这可以用来转换`array - > object`和`object - > array`.再次阅读帖子:*同样可以用于将对象转换为数组*. (2认同)

小智 16

如果你想将整个数组递归转换为Object类型(stdClass),那么下面是最好的方法,它不是耗时或内存不足,特别是当你想要进行递归(多级)转换时,与编写你的自己的功能.

$array_object = json_decode(json_encode($array));
Run Code Online (Sandbox Code Playgroud)


SES*_*ESN 8

最简单的解决方案之一是

$objectData = (object) $arrayData
Run Code Online (Sandbox Code Playgroud)


小智 7

要使用stdClass将数组转换为对象,只需添加(object)到数组u declare.

EX:

echo $array['value'];
echo $object->value;
Run Code Online (Sandbox Code Playgroud)

将对象转换为数组

$obj = (object)$array;
Run Code Online (Sandbox Code Playgroud)

将数组转换为对象

$arr = (array)$object
Run Code Online (Sandbox Code Playgroud)

使用这些方法,您可以非常轻松地在数组和对象之间切换.


另一种方法是使用json

$object = json_decode(json_encode($array), FALSE);
Run Code Online (Sandbox Code Playgroud)

但这是一种内存密集程度更高的方法,并且不受PHP <= 5.1版本的支持