Не уверен, что я понимаю, о чем вы спрашиваете (ваш код в основном делает то, что вы говорите?) Единственное, что я вижу, пропущено, это разделять запятыми.
<?php
$first=true;
foreach ($roles as $role) {
if (!$first) echo ",";
$first=false;
echo $role->title;
}
?>
Или, если кэширование в порядке (длина строки не слишком велика):
<?php
$output="";
foreach ($roles as $role) {
$output.=$role->title.",";
}
echo substr($output,0,-1);//Trim last comma
?>