PHP函数不返回字符串
我构造了一个函数,它接受一个文件名,并在文件名中增加一个计数器并返回它,但是,除了返回不返回文件名之外,一切都是正确的 需要帮忙吗 我的代码:PHP函数不返回字符串,php,string,function,Php,String,Function,我构造了一个函数,它接受一个文件名,并在文件名中增加一个计数器并返回它,但是,除了返回不返回文件名之外,一切都是正确的 需要帮忙吗 我的代码: $filename = join("", array_reverse($date)); $filename .= ".xml"; $dir = "../gigs"; $file = $dir."/".$filename; function getNewFileName($filename, $dir) { if (is_file("$dir/$file
$filename = join("", array_reverse($date));
$filename .= ".xml";
$dir = "../gigs";
$file = $dir."/".$filename;
function getNewFileName($filename, $dir) {
if (is_file("$dir/$filename")) {
if (strpos($filename, "_") === false) {
$filename = str_replace(".xml","_1.xml",$filename);
getNewFileName($filename, $dir);
}
else {
$pos = strpos($filename, "_");
$counter = (int)substr($filename, $pos+1,1);
$counter++;
$filename = substr($filename,0, $pos)."_".$counter.".xml";
getNewFileName($filename, $dir);
}
} else {
// echoing HERE shows that the string is manipulated correctly
return (string)$filename; // but returning here is not working
}
}
echo getNewFileName($filename, $dir); // <- this last line prints nothing out
$filename=join(“,array_reverse($date));
$filename.=“.xml”;
$dir=“../gigs”;
$file=$dir.“/”$filename;
函数getNewFileName($filename,$dir){
如果(是_文件(“$dir/$filename”)){
if(strpos($filename,“”)==false){
$filename=str_replace(“.xml”、“_1.xml”、$filename);
getNewFileName($filename,$dir);
}
否则{
$pos=strpos($filename,“”);
$counter=(int)substr($filename,$pos+1,1);
$counter++;
$filename=substr($filename,0,$pos)。“..$counter..xml”;
getNewFileName($filename,$dir);
}
}否则{
//此处的回音显示字符串操作正确
return(string)$filename;//但是在这里返回不起作用
}
}
echo getNewFileName($filename,$dir);// 您的函数应该是这样的:
function getNewFileName($filename, $dir) {
if (is_file("$dir/$filename")) {
if (strpos($filename, "_") === false) {
$filename = str_replace(".xml","_1.xml",$filename);
return getNewFileName($filename, $dir);
}
else {
$pos = strpos($filename, "_");
$counter = (int)substr($filename, $pos+1,1);
$counter++;
$filename = substr($filename,0, $pos)."_".$counter.".xml";
return getNewFileName($filename, $dir);
}
}
return (string)$filename;
}
echo getNewFileName($filename, $dir); // <- this last line prints nothing out
函数getNewFileName($filename,$dir){
如果(是_文件(“$dir/$filename”)){
if(strpos($filename,“”)==false){
$filename=str_replace(“.xml”、“_1.xml”、$filename);
返回getNewFileName($filename,$dir);
}
否则{
$pos=strpos($filename,“”);
$counter=(int)substr($filename,$pos+1,1);
$counter++;
$filename=substr($filename,0,$pos)。“..$counter..xml”;
返回getNewFileName($filename,$dir);
}
}
返回(字符串)$filename;
}
echo getNewFileName($filename,$dir);// 您的函数应该是这样的:
function getNewFileName($filename, $dir) {
if (is_file("$dir/$filename")) {
if (strpos($filename, "_") === false) {
$filename = str_replace(".xml","_1.xml",$filename);
return getNewFileName($filename, $dir);
}
else {
$pos = strpos($filename, "_");
$counter = (int)substr($filename, $pos+1,1);
$counter++;
$filename = substr($filename,0, $pos)."_".$counter.".xml";
return getNewFileName($filename, $dir);
}
}
return (string)$filename;
}
echo getNewFileName($filename, $dir); // <- this last line prints nothing out
函数getNewFileName($filename,$dir){
如果(是_文件(“$dir/$filename”)){
if(strpos($filename,“”)==false){
$filename=str_replace(“.xml”、“_1.xml”、$filename);
返回getNewFileName($filename,$dir);
}
否则{
$pos=strpos($filename,“”);
$counter=(int)substr($filename,$pos+1,1);
$counter++;
$filename=substr($filename,0,$pos)。“..$counter..xml”;
返回getNewFileName($filename,$dir);
}
}
返回(字符串)$filename;
}
echo getNewFileName($filename,$dir);// 首先,请尝试格式化代码,使缩进可读。其次,您只是没有从对getNewFileName()的递归调用返回:
假设这是您的意图。首先,请尝试格式化代码,使缩进可读。其次,您只是没有从对getNewFileName()的递归调用返回:
function getNewFileName($filename, $dir) {
if (is_file("$dir/$filename")) {
if (strpos($filename, "_") === false) {
$filename = str_replace(".xml","_1.xml",$filename);
return (string)$filename;
} else {
$pos = strpos($filename, "_");
$counter = (int)substr($filename, $pos+1,1);
$counter++;
$filename = substr($filename,0, $pos)."_".$counter.".xml";
return (string)$filename;
}
} else {
return (string)$filename;
}
}
假设这是你的意图
function getNewFileName($filename, $dir) {
if (is_file("$dir/$filename")) {
if (strpos($filename, "_") === false) {
$filename = str_replace(".xml","_1.xml",$filename);
return (string)$filename;
} else {
$pos = strpos($filename, "_");
$counter = (int)substr($filename, $pos+1,1);
$counter++;
$filename = substr($filename,0, $pos)."_".$counter.".xml";
return (string)$filename;
}
} else {
return (string)$filename;
}
}
你的函数有一个无限循环
您的函数有一个无限循环。行:
getNewFileName($filename, $dir);
需要一个返回值
:
return getNewFileName($filename, $dir);
该行:
getNewFileName($filename, $dir);
需要一个返回值
:
return getNewFileName($filename, $dir);
您输入的$filename和$dir的值是多少?我只有一个return
语句,因为它是一个递归函数,当我在return
之前回显$filename
时,字符串是100%正确的,但是返回不返回值,问题是return
只在is\u file()
为false时执行;如果是真的,则没有要执行的return
语句。即使在递归函数中,内部调用的结果也需要return
到外部调用您输入的$filename和$dir的值是多少?我只有一个return
语句,因为它是一个递归函数,当我在返回
之前回显$filename
时,字符串是100%正确的,但返回不返回值。问题是返回
仅在is_file()
为false时执行;如果是真的,则没有要执行的return
语句。即使在递归函数中,内部调用的结果也需要return
ed到外部调用。事实上,该行的两次出现都可以。非常感谢!我真的不明白为什么会这样,你能给我解释一下吗?你在做一个递归函数调用。如果不在堆栈中返回其返回值,则基本情况将永远不会计算为true。事实上,该行的两次出现都会。非常感谢!我真的不明白为什么会这样,你能给我解释一下吗?你在做一个递归函数调用。如果不在堆栈中返回其返回值,则基本情况将永远不会计算为true。它不会循环到无穷大,因为内部函数调用在将参数传递给外部函数之前使用了更改参数的方法callIt不会循环到无穷大,因为内部函数调用在将参数传递给外部函数调用之前正在使用更改参数