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


How to convert an array into an object using 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)
);

我想知道如何使用 stdClass(( 将此数组转换为对象,我是 PHP 初学者,一个简单的示例会非常有帮助,我尝试搜索类似的问题,但答案很复杂,超出了我对基本类和对象的理解。

您只需添加此代码

$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)
);

如果你想看看这个是不是 stdClass 对象,只需调用这个

print_r($clasa);

如果要将数组转换为目标代码,则将

$arr = array('a'=>'apple','b'=>'ball');
$arr = (object) $arr;

您不需要使用 stdClass。它将自动转换为标准类

快速而肮脏的方法是使用 json_encodejson_decode 将整个数组(包括子元素(变成一个对象。

$clasa = json_decode(json_encode($clasa)); //Turn it into an object

这同样可用于将对象转换为数组。只需将, true添加到json_decode即可返回关联的数组:

$clasa = json_decode(json_encode($clasa), true); //Turn it into an array

另一种方式(不脏(只是递归函数:

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

或完整代码:

<?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);
?>

哪些输出(请注意,没有数组 - 只有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
        )
)

所以你会用$obj->e5->nume来指代它。

演示

如果你想递

归地将整个数组转换为对象类型(stdClass(,那么下面是最好的方法,它不耗时或内存不足,特别是当你想做一个递归(多级(转换与编写自己的函数相比。

$array_object = json_decode(json_encode($array));
最简单的

解决方案之一是

$objectData = (object) $arrayData

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

前任:

echo $array['value'];
echo $object->value;

将对象转换为数组

$obj = (object)$array;

将数组转换为对象

$arr = (array)$object

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


另一种方法是使用 json

$object = json_decode(json_encode($array), FALSE);

但这是一种更占用内存的方式,PHP <= 5.1 版本不支持这种方式

数组

stdClass可以用php完成。(stdClass 已经是 PHP 的泛型空类(

$a = stdClass:: __set_state(array());

实际上,在 PHP 5 中调用 stdClass::__set_state(( 会产生致命错误。 感谢@Ozzy指出

这是如何在 PHP5 中将 __set_state(( 与 stdClass 对象一起使用

的示例
class stdClassHelper{
    public static function __set_state(array $array){
        $stdClass = new stdClass();
        foreach ($array as $key => $value){
           $stdClass->$key = $value;
        }
        return $stdClass;
    }
}
$newstd = stdClassHelper::__set_state(array());

或者更好的方法。

$a = (object) array();

或者你可以使用这个东西

$arr = [1,2,3];
$obj = json_decode(json_encode($arr));
print_r($obj);

请使用本教程

<?php
function objectToArray($d) {
        if (is_object($d)) {
            // Gets the properties of the given object
            // with get_object_vars function
            $d = get_object_vars($d);
        }
        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return array_map(__FUNCTION__, $d);
        }
        else {
            // Return array
            return $d;
        }
    }
    function arrayToObject($d) {
        if (is_array($d)) {
            /*
            * Return array converted to object
            * Using __FUNCTION__ (Magic constant)
            * for recursive call
            */
            return (object) array_map(__FUNCTION__, $d);
        }
        else {
            // Return object
            return $d;
        }
    }
        // Create new stdClass Object
    $init = new stdClass;
    // Add some test data
    $init->foo = "Test data";
    $init->bar = new stdClass;
    $init->bar->baaz = "Testing";
    $init->bar->fooz = new stdClass;
    $init->bar->fooz->baz = "Testing again";
    $init->foox = "Just test";
    // Convert array to object and then object back to array
    $array = objectToArray($init);
    $object = arrayToObject($array);
    // Print objects and array
    print_r($init);
    echo "'n";
    print_r($array);
    echo "'n";
    print_r($object);

//OUTPUT
    stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )
        )
    [foox] => Just test
)
Array
(
    [foo] => Test data
    [bar] => Array
        (
            [baaz] => Testing
            [fooz] => Array
                (
                    [baz] => Testing again
                )
        )
    [foox] => Just test
)
stdClass Object
(
    [foo] => Test data
    [bar] => stdClass Object
        (
            [baaz] => Testing
            [fooz] => stdClass Object
                (
                    [baz] => Testing again
                )
        )
    [foox] => Just test
)