Cách chuyển đổi stdClass sang Array và Array sang stdClass (ok)
https://viblo.asia/p/can-ban-php-bJzKmWmXl9N
Tôi nghĩ rằng tất cả các lập trình PHP đã đến qua Array và stdClass Objects. Đôi khi nó rất hữu ích chuyển đổi các Objects sang Array và Array sang Objects. Điều này rất dễ nếu các Array và các Objects là một chiều, nhưng có thể rất khó nếu sử dụng các Array và Objects đa chiều.
Bài này định nghĩa hai hàm đệ quy cực kỳ đơn giản để chuyển đổi các Objects Đa chiều thành Array và Array đa chiều thành Objects.
Chức năng Chuyển đổi các Objects stdClass sang Array đa chiều
<?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;
}
}
Chuyển đổi các Array sang Objects stdClass
<?php
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;
}
}
ví 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);
kết quả:
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
)