php - 如何在 PHP 中以最佳方式构造递归函数的函数参数?

标签 php function recursion

我没有太多 PHP 经验,我想知道如何最好地在 PHP 中创建递归函数。以这个例子为例

$config = array(
    "MYSQL" => array(
        "SERVER" => "localhost",
        "USERNAME" => "root",
        "PASSWORD" => ""
    ),
    "FOO" => "bar"
);

// Make the config global
config_parse(false, $config);

function config_parse($index, $value)
{
    if(is_array($value))
    {
        foreach($value as $i => $e)
        {
            config_parse(($index ? $index . "_" : "") . $i, $e);
        }
    }
    else
    {
        define($index, $value);
    }
}

它做了我想要它做的事情,但是当我以这种方式初始化递归函数时(传递 false 作为初始索引并在函数中检查它),我觉得我正在“黑客攻击”/编写糟糕的代码

解决此问题的一种方法可能是反转输入参数的顺序,这意味着当数组作为值传递时不会访问索引值。

另一种方法是将递归函数分为启动函数和回调函数。

我想知道什么是“最佳实践”,最好是基于我的示例。

感谢回复

最佳答案

对我来说,这取决于递归的复杂性。在您给出的具体示例中,我只需翻转参数并将第二个默认值设置为 null (在这种情况下,我更喜欢 null 而不是 false)。

function config_parse($value, $index = null)
{
  // your logic - id detect null with if(null === $index)
}

关于php - 如何在 PHP 中以最佳方式构造递归函数的函数参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5113460/

相关文章:

php - 构建包含 Between 子句的动态查询

php - 如何在一个查询中从多个数据库中选择记录?

function - plpgsql:奇怪的函数内隐式转换

recursion - 如何在自定义表达式求值器中检测循环逻辑或递归?

php - 分配 ID 后立即从表中提取 ID

php - Laravel 4.1 Facade 非静态方法不应被静态调用

function - 为什么c++11将get<>(tuple)定义为全局函数而不是tuple的成员?

javascript - 我的下拉菜单显示完全不工作

python - 为什么我的 Python 递归函数返回 "none"而不是 "True"?

Ruby:递归混淆