Mag*_*ix- 7 mustache mustache.php
如果我有像这样的PHP数组:
$a = array (
99 => 'Something1',
184 => 'Something2',
);
Run Code Online (Sandbox Code Playgroud)
密钥提供重要信息 - 它可以是一些常量值,ID等
然后我如何从模板中获取当前元素的关键字.例如:
{{#data}}
{.} - it is current value, but I need key also.
{{/data}}
Run Code Online (Sandbox Code Playgroud)
在我们的系统中太多这些类型的数组,它之前很难重新解析它们.什么是更好的解决方案?非常感谢你!
在Mustache中迭代关联数组是不可能的,因为Mustache将其视为"哈希"而不是可迭代列表.即使您可以遍历列表,也无法访问密钥.
为此,您必须准备数据.在将数据传递给Mustache之前,您可以使用foreach循环执行此操作,也可以通过将数组包装在"Presenter"中来完成.像这样的东西应该做的伎俩:
<?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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后只需将数组包装在Presenter中:
$view['data'] = new IteratorPresenter($view['data']);
Run Code Online (Sandbox Code Playgroud)
您现在可以在迭代数据时访问键和值:
{{# data }}
{{ key }}: {{ value }}
{{/ data }}
Run Code Online (Sandbox Code Playgroud)
我喜欢小胡子。在学习过程中,我发现了这个问题,并觉得它需要一个合适的答案。
$this->keyValueArray = Array(
"key1" => "val1",
"key2" => "val2",
"key3" => "val3"
);
$tempArray = array();
foreach($this->keyValueArray as $key=>$val){
$tempArray[] = Array("keyName" => $key, "valName" => $val);
}
$this->mustacheReadyData = ArrayIterator($tempArray);
Run Code Online (Sandbox Code Playgroud)
然后您可以在模板中使用它,如下所示:
{{#mustacheReadyData}}
Key: {{keyName}} Value: {{valName}}
{{/mustacheReadyData}}
Run Code Online (Sandbox Code Playgroud)
通过在 foreach 循环中添加更多值,可以比 Key/Val 进一步扩展。
| 归档时间: |
|
| 查看次数: |
6761 次 |
| 最近记录: |