Es ist nicht möglich, über ein assoziatives Array in Moustache zu iterieren, da es von Moustache als "Hash" und nicht als iterierbare Liste betrachtet wird. Und selbst wenn Sie über die Liste iterieren könnten, wären Sie nicht in der Lage, auf die Schlüssel zuzugreifen.
Um dies zu tun, müssen Sie Ihre Daten vorbereiten. Sie können dies mit einer foreach-Schleife tun, bevor Sie die Daten in Moustache übergeben, oder Sie können es tun, indem Sie Ihr Array in einen "Presenter" einschließen. So etwas wie dies tun sollte den Trick: haben
$view['data'] = new IteratorPresenter($view['data']);
Sie nun Zugriff auf die Schlüssel und Werte, während sie über Ihre Daten zu iterieren:
<?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);
}
}
Dann einfach wickeln Sie Ihre Array in der Presenter
{{# data }}
{{ key }}: {{ value }}
{{/ data }}
Vielen Dank für die Klasse. Ich habe es getestet und benutze es jetzt in einer stabilen Live-Umgebung. Funktioniert gut. –