递归函数引用集合

时间:2011-07-22 13:32:56

标签: php

我正在尝试通过填充引用的数组来使用递归逻辑生成集合,但我对引用的语法并不是那么稳定。下面的例子有意义吗? (我是否了解如何正确使用此运算符?)如果没有,如何完成此操作?

// I want all uniquely named subfolders returned as array
$allFolders = recursive('/');

function recursive($folder,$collection=array())
{
    /* Look up direct children here */

    foreach ($subFolders as $folder) {
         if (!isset($collection[$folder])) {
             $collection[$folder] = $folder;
             recursive($folder,&$collection);
         }
    }
    return $collection;
}

1 个答案:

答案 0 :(得分:0)

您需要在函数定义中声明“by reference” - 并且默认值相当无用,因为在函数完成后您将无法访问它。你应该这样:

$folder = '/';
$collection = array();
recursive($folder, $collection);
print_r($collection);

function recursive($folder, &$collection)
{
    ...
}

虽然PHP5将接受by-reference参数的默认值,但它没有多大意义。

您也不应该在通话中使用“按引用”:

recursive($folder, $collection);

虽然早期版本的PHP中允许第二个(通过调用中的引用),但它已被弃用。