I want to recursively search and replace elements in an array.
The array is tree based so looks like
Object Children Object type A Object type B Object Children Object type A Object
etc.
I want to be able to replace certain items with other items, so for example, I want to replace all entries in the array (at whatever depth level) of type A with an array of type B. But here’s the catch: The newly replaced objects may also have children of type A that need to be replaced.
So far I’ve got
foreach($nodes as &$node) { // Replace node? if($node['type'] == 'RefObject') { $n = $this->site->get_node_where('id', $node['node_ref']); // Replace node $node = $this->site->get_node_where('object_id', $n['object_id']); // Get children $node['children'] = $this->site->get_descendants($node['lft'], $node['rgt']); } } return $nodes;
Which will replace the first level of RefObjects, but will not search the subsequently added children.
I’ve been bashing my head against a wall with this one for hours. Please help!
Cheers, Gaz.
Advertisement
Answer
Put your code into a function and call it again. Pseudocode:
function checkArray($array) { ... if (is_array($node)) { // or whatever other criterium checkArray($node); // same function } }
The basics of recursion are to call the same code again…