Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使用stdClass()将数组转换为对象_Php_Arrays_Stdclass - Fatal编程技术网

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

Php 如何使用stdClass()将数组转换为对象,php,arrays,stdclass,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),

我制作了以下阵列:

$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。它将自动转换为stdClass

使用的快速脏方法,并将整个数组(包括子元素)转换为一个对象

$clasa = json_decode(json_encode($clasa)); //Turn it into an object
同样可以用于将对象转换为数组。只需将
,true
添加到
json\u 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);
?>
所以你可以通过
$obj->e5->nume
来引用它

使用这个


要使用stdClass将数组转换为对象,只需将
(对象)
添加到数组中即可

例:

将对象转换为数组的步骤

$obj = (object)$array;
将数组转换为对象的步骤

$arr = (array)$object
使用这些方法,您可以非常轻松地在数组和对象之间交换


另一种方法是使用json

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

但是,这是一种内存更为密集的方法,PHP版本不支持这种方法。可以通过这种方法在PHP中执行数组到stdClass。 (stdClass已经是PHP的泛型空类)

实际上,在PHP5中调用stdClass::_set_state()将产生一个致命错误。谢谢@Ozzy指出这一点

这是一个如何在PHP5中对stdClass对象使用u_set_state()的示例

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

如果您想递归地将整个数组转换为对象类型(stdClass),那么下面是最好的方法,并且与编写自己的函数相比,它并不耗时或内存不足,尤其是当您想要进行递归(多级)转换时

$array_object = json_decode(json_encode($array));

最简单的解决方案之一是

$objectData = (object) $arrayData

或者你可以用这个东西

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

它已经是一个数组了,那你为什么还要再把它转换成数组呢?太棒了,但从我所读到的来看,这个解决方案执行起来或多或少比较慢。@AmalMurali这是为了补充一点,它可以用来转换
array->object
object->array
。再次阅读文章:同样的方法也可以用于将对象转换为数组。@Alexandrw这是真的。或者,您可以检查“我的编辑”中是否有非脏的解决方案。此解决方案的好处是
json\u decode(json\u encode($clasa))
而不仅仅是使用
(对象)
将数组强制转换为对象是因为后者不会递归执行此操作,因此任何内部数组都会保留为数组。不适用于嵌套数组您必须递归执行嵌套数组的转换,请参见下面的@darleys answer以这种方式对嵌套数组进行转换:$class=(object)['e1'=>(object)['num'=>'Nitu'、'sex'=>'m']、'e2'=>(对象)['num'=>'Nae'、'sex'=>'m']]不适用于嵌套数组。它们仍然是数组,而不是
stdClass
。不适用于嵌套数组。看起来仍然没有转换所有数组
$a = (object) array();
$array_object = json_decode(json_encode($array));
$objectData = (object) $arrayData
$arr = [1,2,3];
$obj = json_decode(json_encode($arr));
print_r($obj);