Here is my take on it:
function formatTime($seconds){
$result=[];
$lbl=['d','h','m','s'];
foreach([86400,3600,60,1] as $i=>$dr){
$next=floor($seconds/$dr);
$seconds%=$dr;
if($next>0)$result[]="$next$lbl[$i]";
}
return implode(' ',$result);
}