PHP胡子.隐式迭代器:如何获取当前值的键(数字php数组)
发布时间:2020-12-13 18:23:24 所属栏目:PHP教程 来源:网络整理
导读:如果我有像这样的 PHP数组: $a = array ( 99 = 'Something1',184 = 'Something2',); 密钥提供重要信息 – 它可以是一些常数值,ids e.t.c 那我怎样才能从模板中获取当前元素的关键字. 例如: {{#data}}{.} - it is current value,but I need key also.{{/dat
如果我有像这样的
PHP数组:
$a = array ( 99 => 'Something1',184 => 'Something2',); 密钥提供重要信息 – 它可以是一些常数值,ids e.t.c 那我怎样才能从模板中获取当前元素的关键字. {{#data}} {.} - it is current value,but I need key also. {{/data}} 在我们的系统中,这些类型的数组太多,并且以前很难对它们进行重新解析.有什么更好的解决方案?
在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); } } 然后只需将数组包装在Presenter中: $view['data'] = new IteratorPresenter($view['data']); 您现在可以在迭代数据时访问键和值: {{# data }} {{ key }}: {{ value }} {{/ data }} (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |