I have looked through a few answers on here but that don't seem to utilise this method?
I have an array of items, and the items are objects. The object can have a key which is 'children' and 'children' is an array of objects etc.
Is there a way to achieve this?
Example:
Array
(
[1] => stdClass Object
(
[id] => 1
[name] => Steve King
[image] => upload/shop/fe7a66254e4249af2b0093efca75a914.jpg
[parent] => 0
[children] => Array
(
)
)
[2] => stdClass Object
(
[id] => 2
[name] => Eden Hall
[image] => upload/shop/064f60a98deba612e437ac549f1dc05d.jpg
[parent] => 0
[children] =>Array
(
[1] => stdClass Object
(
[id] => 1
[name] => Steve King
[image] => upload/shop/fe7a66254e4249af2b0093efca75a914.jpg
[parent] => 0
[children] => Array
(
)
)
)
[3] => stdClass Object
(
[id] => 3
[name] => Paula Johnson
[image] => upload/shop/1492a323090afbad07c35cf93fe6bdda.jpg
[parent] => 0
[children] => Array
(
)
)
[4] => stdClass Object
(
[id] => 4
[name] => Ethan Watson
[image] => upload/shop/677c720333af33bc58d0684d79918e03.jpg
[parent] => 0
[children] => Array
(
)
)
[5] => stdClass Object
(
[id] => 5
[name] => Abigail Adams
[image] => upload/shop/da1734277322fc3b2e84a9ddbcc2e2f1.jpg
[parent] => 0
[children] => Array
(
)
)
The get_object_vars() function is an inbuilt function in PHP that is used to get the properties of the given object. When an object is made, it has some properties. An associative array of properties of the mentioned object is returned by the function. But if there is no property of the object, then it returns NULL.
The is_object() function checks whether a variable is an object. This function returns true (1) if the variable is an object, otherwise it returns false/nothing.
The is_array() function checks whether a variable is an array or not. This function returns true (1) if the variable is an array, otherwise it returns false/nothing.
Object to array PHP is also done with the JSON decode and encode method. In this method, the json_encode() function returns a JSON encoded string for a given value. The json_decode() function accepts the JSON encoded string and converts it into a PHP array.
Assign an array of objects under $array
.
Solution 1: json_encode
an array of objects to make it a json
and then converting an json
into associative array
.
$result=json_decode(json_encode($array),true);
array_walk_recursive($result, function($value,$key){
print_r($value);
print_r($key);
});
Solution 2: Iterating over array and type casting each object
as array
.
array_walk($array,function(&$value,$key){
$value=(array) $value;
});
array_walk_recursive($array, function($value,$key){
print_r($value);
print_r($key);
});
You always can implement a custom recursive iterator for certain data structure. It can be a more flexible solution. For example:
class MyIterator extends \IteratorIterator implements
\RecursiveIterator
{
public function hasChildren()
{
$current = $this->current();
if (is_array($current) and $this->key() === 'children') {
return true;
}
return is_object($current);
}
public function getChildren()
{
/* $current is array (for key 'children') or \stdClass obj*/
$current = $this->current();
return new MyIterator(new \ArrayObject($current));
}
}
$rii = new \RecursiveIteratorIterator(new MyIterator(new
\ArrayObject($data)));
foreach ($rii as $key => $value) {
print_r($key);
print_r($value);
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With