function dealStr($str,&$result=array()){
$findComma = strpos($str,',');
if (!$findComma) {
$result[]=$str;
unset($str);
}else{
//获取字符串长度
$len = strlen($str);
//获取逗号后面的字符
$endOfComma = strstr($str,',');
$CommaLen = strlen($endOfComma);
$findrednik = strpos($endOfComma,';');
//截取','第一次出现位置之前的字符
$str1 = substr($str,0,$findComma);
$str2 = $str1.substr($endOfComma,$findrednik,$CommaLen);//结果1→3;2→3;3→1;4→3;5→0;6→1;7→1,2;9→3;14→0 1 2 9_1
$str3 = substr($str,0,$findComma-1);
$str4 = $str3.substr($str,$findComma+1,$len);//结果1→3;2→3;3→1;4→3;5→1,2;6→1;7→1,2;9→3;14→0 1 2 9_1
unset ($str);
dealStr($str2,$result);
dealStr($str4,$result);
} return $result;}$str = '1→0,1,2;2→0,1,2;3→0,1,2;4→0,1,2;5→0,1,2;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1';
$msg = dealStr($str);
print_r($msg);Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 24 bytes) in E:\WWW\test.php on line 70
在 dealStr 函数入口处检查传入的参数
echo $str,PHP_EOL;
可以看到
1→0,1,2;2→0,1,2;3→0,1,2;4→0,1,2;5→0,1,2;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0,1,2;3→0,1,2;4→0,1,2;5→0,1,2;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0,1,2;4→0,1,2;5→0,1,2;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0;4→0,1,2;5→0,1,2;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0;4→0;5→0,1,2;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0;4→0;5→0;6→0,1,2;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0;4→0;5→0;6→0;7→0,1,2;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0;4→0;5→0;6→0;7→0;9→0,1,2;14→0,1,2 1 2 9_1
1→0;2→0;3→0;4→0;5→0;6→0;7→0;9→0;14→0,1,2 1 2 9_1 从这里开始就重复了。陷入了死循环
1→0;2→0;3→0;4→0;5→0;6→0;7→0;9→0;14→0,1,2 1 2 9_1由于不知道你想做什么,无法提供有益的建议
PHP中的函数嵌套层数限制 : http://www.phppan.com/2011/06/php-function-nesting-level/
1.6 递归 尾递归 迭代 回调 : http://www.source-open.com/688200