示例#1
0
 public function getParentsWithChildren()
 {
     $top = ['children' => []];
     $insertIn = function (&$root, $parentAlias, $alias, $value) use(&$insertIn) {
         foreach ($root['children'] as $i => $child) {
             if ($i == $parentAlias) {
                 $root['children'][$i]['children'][$alias] = $value;
             } else {
                 if ($result = $insertIn($root['children'][$i], $parentAlias, $alias, $value)) {
                     return $result;
                 }
             }
         }
         return false;
     };
     foreach ($this->models as $index => $model) {
         $alias = $model['alias'];
         $value = ['children' => [], 'self' => $this->getModelByAlias($alias)];
         if ($parentAlias = $model['matchInfo']['parent'] ?? null) {
             if ($insertIn($top, $parentAlias, $alias, $value)) {
                 $this->logger->warning("Unable to find parent ({$parentAlias}) for model: {$alias}");
             }
         } else {
             $top['children'][$alias] = $value;
         }
     }
     return $top['children'];
 }