lmbCollection

Класс lmbCollection реализует интерфейс lmbCollectionInterface. см. также Контейнеры данных

Класс lmbCollection используется в случах, когда нужно представить массив данных (вернее массив ассоцивных массивов) в виде итератора.

Возьмем самым простой пример. Мы создадим небольшой массив данных, сделаем из него lmbCollection и пройдемся по нему при помощи интерфейса Iterator.

$data = array (
  array ('username' => 'jdoe', 'email' => 'jdoe@hotmail.com'),
  array ('username' => 'rsmith', 'email' => 'rsmith@cure.org'),
  array ('username' => 'nclark', 'email' => 'nclark@yahoo.com'),
);
 
$rs = new lmbCollection($data);
 
$str = '';
for($rs->rewind(); $rs->valid(); $rs->next())
{
  $record = $rs->current();
  $str .= 'User: '. $record->get('username') . ' ';
  $str .= 'Email: '. $record->get('email') . "\n";
}

Так как lmbCollection реализует интерфейс Traversable, можно использовать более короткую форму прохождения по итератору через foreach():

$data = array (...);
$iterator = new lmbCollection($data);
foreach($iterator as $item)
 echo $item->get('username') . ' ';  // выведет jdoe rsmith nclark

Так как lmbCollection реализует SPL интерфейс ArrayAccess можно написать и так:

$data = array(...);
$iterator = new lmbCollection($data); 
echo sizeof($iterator); // выведет 3
echo $iterator[1]->get('username') // выведет rsmith

В качестве данных в lmbCollection можно прислать массив объектов класса lmbSet или любых других, которые поддерживают интерфейс lmbSetInterface:

$data = array (
  new lmbSet(array('username' => 'jdoe', 'email' => 'jdoe@hotmail.com')),
  new lmbSet(array('username' => 'rsmith', 'email' => 'rsmith@cure.org')),
  new lmbSet(array('username' => 'nclark', 'email' => 'nclark@yahoo.com')),
);
 
$iterator = new lmbCollection($data);

lmbCollection поддерживает лимитирование, например:

$data = array(...); 
$iterator = new lmbCollection($data);
$iterator->paginate(1, 2);
foreach($iterator as $item)
  echo $item->get('username') . ' ' . $item->get('email') . ' | '; // выведет rsmith rsmith@cure.org | nclark nclark@yahoo.com |

Кроме методов, характерных для интерфейса lmbCollectionInterface поддерживаем след. методы:

Дополнительные примеры по использованию класса lmbCollection см. в тестах: