3v4l.org

run code in 500+ PHP versions simultaneously
<?php $a = [ 'admin' => [ 'user', 'changeUser', ], 'user' => [ 'guest', 'updatePassword', ], 'guest' => [ 'login', 'admin', ], ]; $role = 'admin'; $permissions = $a[$role]; $groups = []; $final = []; while (!empty($permissions)) { $permission = array_shift($permissions); if (in_array($permission, $groups)) { continue; } if (!empty($a[$permission])) { array_push($groups, $permission); array_push($permissions, ...$a[$permission]); } else { $final[] = $permission; } } var_export($final);
Output for 8.2.31 - 8.2.32, 8.3.0 - 8.3.32, 8.4.1 - 8.4.23, 8.5.0 - 8.5.8
array ( 0 => 'changeUser', 1 => 'updatePassword', 2 => 'login', 3 => 'changeUser', )

preferences:
29.97 ms | 768 KiB | 4 Q