'or', 'status' => 'ok', 'handled' => false, 'children' => [ 'DNS Service' => (object) [ 'status' => 'ok', 'handled' => false, 'children' => [], ], 'Exchange' => (object) [ 'operator' => 'and', 'status' => 'critical', 'handled' => false, 'children' => [ 'Exchange 1' => (object) [ 'status' => 'critical', 'handled' => false, 'children' => [], ], 'Exchange 2' => (object) [ 'status' => 'warning', 'handled' => true, 'children' => [], ], 'Exchange 3' => (object) [ 'status' => 'ok', 'handled' => false, 'children' => [], ] ], ] ] ]; function renderProcess($name, $process) { $html = sprintf('%s ', $process->status, $process->handled ? ' handled' : '', empty($process->children) ? '' : ' operator', empty($process->children) ? ' class="service"' : sprintf(' rowspan="%d"', count($process->children) + 1), empty($process->children) ? ' ' : $process->operator, $name ); if (! empty($process->children)) { // $html .= ' //'; foreach ($process->children as $name => $child) { $html .= ''; } // $html .= ''; } $html .= '
%s
' . renderProcess($name, $child) . '
'; return $html; } ?>

Testlayout