在Smarty模板中使用php函数

Oso*_*omA 1 php arrays smarty

我如何在Smarty模板中使用PHP函数中的array_push.

我试过这个

{assign var='out' value=array()}
{foreach $data['data'] as $dataInfo}
   {$out|@array_push {$dataInfo['a']}:{$dataInfo['b']}}

{/foreach}

{$out|var_dump}
Run Code Online (Sandbox Code Playgroud)

Mar*_*łek 7

你还没有解释你想要实现什么结果,事实上你应该在控制器/模型中而不是在视图中做这些事情.

但是如果在PHP中你有:

$smarty->assign(
    'data',
    array(
        'data' => array(
            array('a' => 'one', 'b' => 'two'),
            array('a' => 'three', 'b' => 'four')
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

在Smarty文件中你有:

{assign var='out' value=array()}
{foreach $data['data'] as $dataInfo}

    {append var='out' value=$dataInfo['a']}
    {append var='out' value=$dataInfo['b']}

{/foreach}

{$out|var_dump}
Run Code Online (Sandbox Code Playgroud)

输出将是:

array(4) { [0]=> string(3) "one" [1]=> string(3) "two" [2]=> string(5) "three" [3]=> string(4) "four" } 
Run Code Online (Sandbox Code Playgroud)

正如所料.

array_push 在这种情况下不是最佳解决方案,因为它也会显示元素数量,因此使用:

{assign var='out' value=array()}
{foreach $data['data'] as $dataInfo}
    {$out|array_push:$dataInfo['a']}<br />
    {$out|array_push:$dataInfo['b']}<br />

{/foreach}

{$out|var_dump}
Run Code Online (Sandbox Code Playgroud)

你也会得到数字显示:

1
2
3
4
array(4) { [0]=> string(3) "one" [1]=> string(3) "two" [2]=> string(5) "three" [3]=> string(4) "four" } 
Run Code Online (Sandbox Code Playgroud)

根据评论编辑回复

我想这样显示:a:b,c:d这个元素是| $ array [0] = Array('aa'=>'a','bb'=>'b')$ array [1] = Array('cc'=>'c','dd'=>'d ");

如果在PHP中你有:

$array = array();
$array[0] = Array('aa' => 'a', 'bb' => 'b');
$array[1] = Array('cc'=>'c', 'dd'=>'d');

$smarty->assign(
    'data', $array
    );
Run Code Online (Sandbox Code Playgroud)

在Smarty你应该使用:

{foreach $data as $dataInfo}
    {$dataInfo|implode:':'}{if not $dataInfo@last}, {/if}
{/foreach}
Run Code Online (Sandbox Code Playgroud)

输出将是:

a:b, c:d 
Run Code Online (Sandbox Code Playgroud)

但是,无论如何你array_push在Smarty模板中询问有关使用PHP函数的问题都没有关联