5

最初の smarty 配列要素を取得するにはどうすればよいですか?

実際、私はこれを行う方法を知っています...しかし、次の問題があります。

このような配列が渡されます

[DATA] => Array
        (
            [12] => Array
                (
                    [content] => foobar
                )

            [1] => Array
                (
                    [content] =>  
                )

            [2] => Array
                (
                    [content] =>  
                )

            [3] => Array
                (
                    [content] =>  
                )

 //this is a snipit of {$myVar|@print_r}

これは、[11]

何らかの理由で、この位置には no[0]と aがありません。[12]

これが常に 12 になるかどうかはわかりませんが、常に最初の位置にあることはわかっています。

同じ並べ替え順序を持つ別の配列があり、後で出力するためにこの順序を維持する必要があるため、この配列を並べ替えることができません。

orを使用せずに最初の要素を選択する方法はありますarray[0]array.0?

情報:現在取り組んでいるプロジェクトでは Smarty 2 を使用しています

編集

  • 方法がわかれば、配列のインデックスを再作成します:)

数時間後に回答があったので、一時的に問題を解決しました。

これを解決するために{php}、smarty で開き、必要な配列を取得し、それを 2 つの配列に分割しました (もちろん、インデックスを再作成して から開始します0)。各配列のpos0 を一時配列に一時保存するよりも。orig0をアンダースコア (_) でオーバーライドし、それらをマルチソートするよりも元の値を0戻して、$this->_tpl_vars非常に複雑な方法に戻します。(すべて tpl 内)

{php}
    // get array data and re-index it
    $i=0;
    foreach( $this->_tpl_vars['options'] as $option )
    {
        foreach( $option['DATA'] as $data )
            $array[$i][] = $data;
        $i++;
    }

    //delete empty entrys
    $i=0;
    foreach( $array[1] as $data ){
        if(trim($data['content']) != ""){
            $s[] = $array[0][$i];
            $a[] = $array[1][$i];
        }
        $i++;
    }

    //temp save first values
    $tmp_s  = $s[0];
    $tmp_a  = $a[0];

    //override first values to have a clean sort and keep them values on pos 0
    $s[0] = $a[0] = "_";

    //sort the arrays
    array_multisort($s,$a);

    //putting back the original values
    $s[0] = $tmp_s;
    $a[0] = $tmp_a;

    //pass the array back to tpl_vars
    $this->_tpl_vars['new_options'][] = $s;
    $this->_tpl_vars['new_options'][] = $a;


{/php}
4

2 に答える 2

21

PHP の場合:

$smarty->assign(
    'myVar',
    array('DATA' =>
              array(
                  12 => array('content' => 'first element'),
                  1 => array('content' => 'second element')
              ))
);

Smarty では以下を使用できます。

{assign var=first value = $myVar.DATA|@key}
{$myVar.DATA.$first.content}

そして、あなたが表示されます:

最初の要素

ただし、PHP で使用する場合:

$data = array(
    12 => array('content' => 'first element'),
    1 => array('content' => 'second element')
);

next($data);

$smarty->assign(
    'myVar',
    array('DATA' => $data
              )
);

Smarty では、最初に示したものと同じものを使用すると、結果は次のようになります。

2 番目の要素

次のように呼び出す必要があります。

reset($data);

next($data);

Smarty で配列のリセットを呼び出すことはできないと思いますが、間違っている可能性があります。

Smarty で配列をリセットすることもできますが、それほど簡単ではありません。

PHP の場合:

$data = array(
    12 => array('content' => 'first element'),
    1 => array('content' => 'second element')
);

next($data);

$smarty->assign(
    'myVar',
    array('DATA' => $data
              )
);

Smarty では、以下を使用できます。

{assign var=$myVar.DATA value=$myVar.DATA|@reset}

{assign var=first value = $myVar.DATA|@key}
{$myVar.DATA.$first.content}

そして、あなたは得るでしょう:

最初の要素

結果として

于 2014-08-22T19:13:42.923 に答える