Looks like no one can help me (apart from pointing out typo errors) so I figured out it by myself. It's little bit ugly solution but it works like I want:
private function validateTree($tree)
{
foreach($tree as $node)
{
$parentName = $node['title'];
if(isset($node['children']) and is_array($node['children']))
{
if((bool)$node = $this->validateLevel($node['children']))
{
$this->errors[] = $node;
}
}
else
{
$this->errors[] = $node;
}
}
}
private function validateLevel($nodes)
{
foreach($nodes as $node)
{
if(isset($node['children']) and (bool)$node['children'] and is_array($node['children']))
{
foreach($node['children'] as $nodeLvl3)
{
if(isset($nodeLvl3['children']) and (bool)$nodeLvl3['children'] and is_array($nodeLvl3['children']))
{
foreach($nodeLvl3['children'] as $nodeLbl)
{
//everything is OK
}
}
else
{
$this->errors[] = 'Category'.$nodeLvl3['title'].' does not have lvl 4';
}
}
}
else
{
$this->errors[] = 'Category'.$node['title'].' does not have lvl 3';
}
}
}