0

我正在尝试在 smarty 插件目录中编写一个 smarty 函数。它是一个递归函数。它在普通的 php 文件中运行良好,并且会生成一个下拉选择框。现在我想让它成为一个聪明的函数,并想从 tpl 调用它。

            <?php
        /*
        * Smarty plugin
        * ————————————————————-
        * File:     function.recurse_array.php
        * Type:     function
        * Name:     recurse_array
        * Purpose:  prints out elements of an array recursively
        * ————————————————————-
        */

        function smarty_function_recurse_array($arr,$depth=0, &$smarty)
        {
            $html = '';
                    foreach ( $arr as $v ) {

                        $html.= '<option value="' . $v['id'] . '">';
                        $html.= str_repeat('-', $depth);
                        $html.= $v['cata_name'] . '</option>' . PHP_EOL;

                        if ( array_key_exists('subcategories', $v) ) {
                            $html.= smarty_function_recurse_array($v['subcategories'], $depth+1);
                        }
                    }

                    return $html;
        }

该文件存储在 smarty 插件目录中,并希望调用为

{recurse_array array=$myarray}

现在我对递归调用函数参数部分感到困惑

$html.= smarty_function_recurse_array($v['subcategories'], $depth+1);

它会生成一个警告

Warning: Missing argument 3 for smarty_function_recurse_array()

我该如何解决这个问题?

4

1 回答 1

0

尝试这个:

<?php

/*
* Smarty plugin
* ————————————————————-
* File:     function.recurse_array.php
* Type:     function
* Name:     recurse_array
* Purpose:  prints out elements of an array recursively
* ————————————————————-
*/

function smarty_function_recurse_array($params, &$smarty)
{
    $depth = isset($params['depth'])?$params['depth']:0;

    $html = '';
    foreach ( $params['array'] as $v ) {    
        $html.= '<option value="' . $v['id'] . '">';
        $html.= str_repeat('-', $depth);
        $html.= $v['cata_name'] . '</option>' . PHP_EOL;

        if ( array_key_exists('subcategories', $v) ) {
            $html.= smarty_function_recurse_array(array ('array' => $v['subcategories'], 'depth' => $depth + 1), $smarty);
        }
    }

    return $html;
}
于 2013-04-21T17:18:37.277 回答