2

我想在 smarty 模板中调用 foreach 循环内的函数,如果有人在 smarty 模板和它的函数中很熟悉,请帮助我解决这个问题。

PHP 中的示例:

<?php
function array_combine_($keys, $values)
{
    $result = array();
    foreach ($keys as $i => $k) {
        $result[$k][] = $values[$i];
    }
    array_walk($result, create_function('&$v', '$v = (count($v) == 1)? array_pop($v): $v;'));
    return $result;
}
$country = array("India","United States","United Kingdom","India","Australia");
$city    = array("Coimbatore","Newyork","London","Bangalore","Melborne");
$output  = array_combine_($country, $city);
$get_array_keys = array_keys($output);
$get_array_values = array_values($output);
$get_count = count(array_keys($output));
for($i=0;$i<$get_count;$i++){
    if(is_array($get_array_values[$i])){
        echo "<b>".$get_array_keys[$i]."</b>&nbsp;-&nbsp;".implode(",",$get_array_values[$i])."<br>";
    }
    else{
        echo "<b>".$get_array_keys[$i]."</b>&nbsp;-&nbsp;".$get_array_values[$i]."<br>";
    }
}
?>

输出 :

India - Coimbatore,Bangalore
United States - Newyork
United Kingdom - London
Australia - Melborne

Smarty 中的示例:

{foreach from=$companies item=record key=key}
{$record.country}
{$record.city}
{/foreach}

现在如何将这个 {$record.country} 和 {$record.city} 值传递给 array_combine_($arg1,$arg2); 在 {foreach} 循环内,如下所示:

{foreach from=$companies item=record key=key}
{$record.country}
{$record.city}
array_combine_({$record.country},{$record.city});
{/foreach}

提前致谢。

4

2 回答 2

1

正如我告诉你的那样,我不建议你这样做..

如果您确定您在模板上做什么,您可以描述您的功能并使用它。只需放置 php 标签,以便聪明地不要解析它..

{php}
    function array_combine_(){
    }
{/php}
{foreach from=$companies item=record key=key}
    {$record.country}
    {$record.city}
    array_combine_({$record.country},{$record.city});
{/foreach}
于 2013-04-30T06:28:06.733 回答
0

只需从 php 端准备 array_combine() 结果并将其传递给 smarty 以显示它。尝试在 smarty 方面减少更多功能。

在 smarty 中,仅使用其可用的函数,如大写等。不要尝试在 smarty 中使用 php 函数。

于 2013-04-30T06:09:43.200 回答