Recursively search objects

object, php, recursion

Solution

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...

Problem

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.

Original source