protected static function sort($list) { foreach (array_keys($list) as $i) { if (isset($list[$i]['children'])) { $list[$i]['children'] = static::sort($list[$i]['children']); } } $sorter = new \Punic\Comparer(); uasort($list, function ($a, $b) use($sorter) { return $sorter->compare($a['name'], $b['name']); }); return $list; }