1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php array stdclass php - 如何使用stdClass()将数组转换为对象

php array stdclass php - 如何使用stdClass()将数组转换为对象

时间:2023-07-20 19:58:27

相关推荐

php array stdclass php  - 如何使用stdClass()将数组转换为对象

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

这个问题在这里已有答案:

如何在PHP中将数组转换为对象? 31个答案

我做了以下数组:

$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初学者,一个简单的例子会非常有帮助,我已经尝试过搜索类似的问题,但答案很复杂 超越我对基本类和对象的理解。

8个解决方案

181 votes

您只需添加此代码即可

$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

Ekramul Hoque answered -08-26T10:25:07Z

49 votes

快速而肮脏的方式是使用json_encode和$obj->e5->nume,它将整个数组(包括子元素)转换为对象。

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

可以使用相同的方法将对象转换为数组。 只需添加$obj->e5->nume至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;

}

或完整代码:

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' s):

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

h2ooooooo answered -08-26T10:26:09Z

16 votes

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

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

darleys answered -08-26T10:26:36Z

6 votes

最简单的解决方案之一是

$objectData = (object) $arrayData

SESN answered -08-26T10:27:00Z

5 votes

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

EX:

echo $array['value'];

echo $object->value;

将对象转换为数组

$obj = (object)$array;

将数组转换为对象

$arr = (array)$object

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

另一种方法是使用json

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

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

Vikas_web answered -08-26T10:28:03Z

4 votes

数组到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();

Beaudinn Greve answered -08-26T10:28:49Z

3 votes

或者你可以使用这个东西

$arr = [1,2,3];

$obj = json_decode(json_encode($arr));

print_r($obj);

yussan answered -08-26T10:29:13Z

1 votes

使用本教程

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

)

Shakti Patel answered -08-26T10:29:38Z

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。