3v4l.org

run code in 300+ PHP versions simultaneously
<?php $json = '[ {"id":3633,"name":"Mobile phones and accessories","left":1,"right":18,"level":1,"elements":0}, {"id":3638,"name":"Mobile phones","left":2,"right":3,"level":2,"elements":174}, {"id":21396,"name":"Tablets","left":19,"right":24,"level":1,"elements":0}, {"id":21450,"name":"Some Tablets","left":20,"right":21,"level":2,"elements":8}, {"id":21450,"name":"other Tablets","left":20,"right":21,"level":2,"elements":8} ]'; $data = new ArrayIterator(json_decode($json, true)); function buildTree(iterator $data, int $level = 1): array { $tree = array(); while ($data->valid()) { $item = $data->current(); if ($item['level'] < $level) return $tree; if ($item['level'] === $level) { $data->next(); $tree[] = [ 'item' => $item, 'children' => buildTree($data, $level + 1), ]; } } return $tree; } $tree = buildTree($data); print_r($tree); ?>

preferences:
25.43 ms | 405 KiB | 5 Q