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