我正在尝试通过填充引用的数组来使用递归逻辑生成集合,但我对引用的语法并不是那么稳定。下面的例子有意义吗? (我是否了解如何正确使用此运算符?)如果没有,如何完成此操作?
// 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;
}
答案 0 :(得分:0)
您需要在函数定义中声明“by reference” - 并且默认值相当无用,因为在函数完成后您将无法访问它。你应该这样:
$folder = '/';
$collection = array();
recursive($folder, $collection);
print_r($collection);
function recursive($folder, &$collection)
{
...
}
虽然PHP5将接受by-reference参数的默认值,但它没有多大意义。
您也不应该在通话中使用“按引用”:
recursive($folder, $collection);
虽然早期版本的PHP中允许第二个(通过调用中的引用),但它已被弃用。