function threadedToList($treaded, $keyPath, $valPath, $spacer = " ", $lvl = 0) { $out = array(); foreach ($treaded as $item) { $out[Set::extract($keyPath, $item)] = str_repeat($spacer, $lvl) . Set::extract($valPath, $item); if (!empty($item['children'])) { $out = array_merge($out, SetMulti::threadedToList($item['children'], $keyPath, $valPath, $spacer, $lvl + 1)); } } return $out; }