Поиск ключа в многомерном массиве, а затем изменение значения с помощью PHP

У меня есть многомерный массив, который выглядит так

[0] => Array ( [recordId] => 5 [leaf] => 1 [children] => Array ( [0] => Array ( [recordId] => 6 [leaf] => 1 [children] => Array ( [0] => Array ( [recordId] => 7 [leaf] => 1 ) ) ) [1] => Array ( [recordId] => 8 [leaf] => 1 [children] => Array ( [0] => Array ( [recordId] => 9 [leaf] => 1 ) [1] => Array ( [recordId] => 10 [leaf] => 1 ) ) ) ) ) 

Каждый узел имеет ключ «лист», который по умолчанию имеет значение «ИСТИНА» и имеет «дочерний» массив, если есть другие узлы вниз.

Мне нужно установить значение ключа «leaf» в FALSE, если в нем есть «дочерний» массив. Таким образом, только конечные узлы имеют обозначение leaf = TRUE.

Я пробовал поиск, но не могу найти код, чтобы делать то, что мне нужно, и я не могу обернуть голову вокруг рекурсивной функции, которая, я считаю, необходима.

Любые идеи, как я мог бы это сделать в PHP?

Спасибо за помощь.

Теоретически это должно работать:

 function findChild(&$array){ foreach($array as &$arr){ if(isset($arr['children'])){ $arr['leaf'] = 0; //there are children findChild($arr['children']); } else { $arr['leaf'] = 1; //there are no children } } } 

Вот рабочая демонстрация: http://codepad.org/AnYiRpES

Довольно просто:

 function leafOrNotLeaf(array $array) { foreach ($array as $key => $sub) { if (isset($sub['children'])) { $array[$key]['leaf'] = false; $array[$key]['children'] = leafOrNotLeaf($sub['children']); } } return $array; } $new_array = leafOrNotLeaf($array); 

Прогулка по фактическому $array :

 array_walk($array, $walker = function (&$node) use (&$walker) { $node['leaf'] = (int) empty($node['children']) OR array_walk($node['children'], $walker); }); 

Может быть, немного загадочно, поэтому вам нужно любить PHP.