Nie można wykonywać iteracji na tablicy asocjacyjnej w wąsach, ponieważ wąsy są postrzegane jako "hash", a nie jako lista iterowalna. I nawet jeśli mógłbyś powtórzyć listę, nie byłbyś w stanie uzyskać dostępu do kluczy.
W tym celu należy przygotować swoje dane. Możesz to zrobić za pomocą pętli foreach, zanim przekażesz dane do wąsów, lub możesz to zrobić, owijając tablicę w "Presenter". Coś jak to powinno załatwić sprawę:
<?php
class IteratorPresenter implements IteratorAggregate
{
private $values;
public function __construct($values)
{
if (!is_array($values) && !$values instanceof Traversable) {
throw new InvalidArgumentException('IteratorPresenter requires an array or Traversable object');
}
$this->values = $values;
}
public function getIterator()
{
$values = array();
foreach ($this->values as $key => $val) {
$values[$key] = array(
'key' => $key,
'value' => $val,
'first' => false,
'last' => false,
);
}
$keys = array_keys($values);
if (!empty($keys)) {
$values[reset($keys)]['first'] = true;
$values[end($keys)]['last'] = true;
}
return new ArrayIterator($values);
}
}
Następnie wystarczy owinąć tablicę w Presenter:
$view['data'] = new IteratorPresenter($view['data']);
mieć teraz dostęp do kluczy i wartości podczas iteracji nad danymi:
{{# data }}
{{ key }}: {{ value }}
{{/ data }}
Wielkie dzięki dla klasy. Przetestowałem to i używam go teraz w stabilnym środowisku na żywo. Działa w porządku. –