3v4l.org

run code in 300+ PHP versions simultaneously
<?php class Notification { public $is_notifyable; public $children = []; } function mergeNotifications(Notification ... $notifications) : array { $result = []; foreach ($notifications as $notification) { // Can no longer be "empty" // if (empty($notification)) continue; // is_notifyable is now a promise that your interface made: if ($notification->is_notifyable) { $result[] = $notification; } else { // flatten the notifications recursively: foreach(mergeNotifications(...$notification->children) as $child) { $result[] = $child; } } } return $result; } $arr = [ new Notification(), new Notification(), ]; var_dump(mergeNotifications(...$arr));

preferences:
61.95 ms | 402 KiB | 5 Q