如何使用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。 它会自动转换为stdClass

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

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

同样可以用来将一个对象转换成一个数组。 只需简单地添加json_decode即可返回一个关联的数组:

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

另一种方式(不要肮脏)只是一个recursion函数:

 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来引用它。

DEMO

如果要recursion地将整个数组转换为Objecttypes(stdClass),那么下面是最好的方法,它不是耗时或内存不足的情况,特别是当您要执行recursion(多级)转换时自己的function。

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

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

EX:

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

最简单的解决scheme之一是

 $objectData = (object) $arrayData 

或者你可以使用这个东西

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