Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/264.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP函数不返回字符串_Php_String_Function - Fatal编程技术网

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不会循环到无穷大,因为内部函数调用在将参数传递给外部函数调用之前正在使用更改参数