Последний элемент в итерации с PHP
Я хочу разделить результаты итерации запятыми, но это не массив. Я хочу сделать это в представлениях, поэтому код не должен быть длинным.
<?php foreach ($roles as $role): ?>
<?php echo $role->title; ?>
<?php endforeach; ?>
Объект результата реализует Countable, Iterator, SeekableIterator, ArrayAccess.
2 ответа
Решение
Не уверен, что я понимаю, о чем вы спрашиваете (кажется, ваш код в основном делает то, что вы говорите?) Единственное, что я пропускаю - это разделение запятой
<?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
?>
Если твой $roles
Переменная - это объект, напишите метод, который возвращает массив значений свойств. Что-то вроде:
class Roles implements Countable, Iterator, SeekableIterator, ArrayAccess {
//main body of the class here
public function prop_as_array($prop){
if(!property_exists('Role', $prop)) throw new Exception("Invalid property");
$arr=array();
if(count($this)==0) return $arr
foreach($this as $role){
$arr[]=$role->$prop;
}
return $arr;
}
}
//on output page
$roles=new Roles;
echo implode(',', $roles->prop_as_array('title'));