7

次のようなphp配列がある場合:

 $a = array (
    99 => 'Something1',
    184 => 'Something2',
 );

そしてキーは重要な情報を提示します - それはいくつかの定数値、IDなどです

次に、テンプレートから現在の要素のキーを取得するにはどうすればよいですか。例えば:

{{#data}}

{.} - it is current value, but I need key also.

{{/data}}

私たちのシステムでは、この種の配列が多すぎて、以前にそれらを再解析するのが不快でした。これに対するより良い解決策は何ですか?どうもありがとうございました!

4

2 に答える 2

8

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 }}
于 2013-03-25T15:58:51.277 に答える
4

私は口ひげが大好きです。学習中にこの質問を見つけ、適切な回答が必要だと感じました。

$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);

次に、テンプレートで次のように使用できます。

{{#mustacheReadyData}}
    Key: {{keyName}} Value: {{valName}}
{{/mustacheReadyData}}

これは、foreach ループに値を追加することで、Key/Val よりもさらに拡張できます。

于 2014-01-26T00:17:49.497 に答える