<?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));
Warning: PHP Startup: Unable to load dynamic library 'sodium.so' (tried: /usr/lib/php/8.3.5/modules/sodium.so (libsodium.so.23: cannot open shared object file: No such file or directory), /usr/lib/php/8.3.5/modules/sodium.so.so (/usr/lib/php/8.3.5/modules/sodium.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
array(0) {
}