我有一个表示文件系统结构的数组结构
Array
(
[.config] => Array
(
[0] => database.ini
[1] => javascript.ini
[3] => project.ini
[5] => session.ini
[6] => system.ini
[.plugins] => Array
(
[0] => comments.ini
[1] => user.ini
)
...
我想用完整(相对)路径表示每个文件
Array
(
[0] => config/database.ini
[1] => config/javascript.ini
[3] => config/project.ini
[5] => config/session.ini
[6] => config/system.ini
[7] => config/plugins/comments.ini
[8] => config/plugins/user.ini
...
为此,我写了这个函数
function recur($elem){
if(is_array($elem)){
return recur($elem);
}else{
return $elem;
}
}
它正在给我
致命错误:允许的内存大小为134217728字节耗尽(尝试分配65488字节)
答案 0 :(得分:3)
问题是您的递归函数永远不会终止,您传入一个数组,然后如果这是一个数组,您可以使用相同的数组调用相同的函数,依此类推。
你应该做的是递归嵌套级别:
function recur($elem){
foreach($elem as $nested){
if(is_array($nested)){
return recur($nested);
}else{
return $nested;
}
}
}
这样你就可以在嵌套数组上使用函数,而不是你正在处理的外部函数,注意你可能需要根据想要的输出略微改变if / else条件,实际上返回意味着退出foreach,如果你想走所有数组级别,你应该避免返回并使用累加器来累积结果,但正如我所说,它取决于所需的输出。
答案 1 :(得分:0)
PHP正在尝试使用比允许更多的内存(在您的情况下,它限制为128 MiB)。
您必须调整php.ini中的memory_limit
(请参阅http://www.ducea.com/2008/02/14/increase-php-memory-limit/)或找到一种不需要将所有路径存储在内存中的方法。
但是当你的recur
- 方法进入无限递归时,这不会解决你的问题(它使用与调用它完全相同的参数调用自身,因此,它永远不会终止 - 增加php内存限制不会解决这个问题,因为你可能会遇到堆栈溢出。