Функция PHP не возвращает строку - PullRequest
1 голос
/ 21 января 2010

Я создал функцию, которая принимает имя файла, увеличивает счетчик в имени файла и возвращает его, однако все верно, кроме возврата, не возвращающего имя файла.

Любая помощь, пожалуйста?

Мой код:

$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

Заранее спасибо.

Ответы [ 4 ]

11 голосов
/ 21 января 2010

Линия:

getNewFileName($filename, $dir);

нужен return:

return getNewFileName($filename, $dir);
1 голос
/ 21 января 2010

Вот как должна выглядеть ваша функция:

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
0 голосов
/ 21 января 2010
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;
  }
}

У вашей функции был цикл до бесконечности.

0 голосов
/ 21 января 2010

Во-первых, пожалуйста, попробуйте отформатировать код так, чтобы отступы были читабельными. Во-вторых, вы просто не возвращаетесь из рекурсивных вызовов на getNewFileName():

function getNewFileName($filename, $dir) {
  if (is_file("$dir/$filename")) {
    if (strpos($filename, "_") === false) {
      $filename = str_replace(".xml","_1.xml",$filename);
      return getNewFileName($filename, $dir); // here
    } else {
      $pos = strpos($filename, "_");
      $counter = (int)substr($filename, $pos+1,1);
      $counter++;
      $filename = substr($filename,0, $pos)."_".$counter.".xml";
      return getNewFileName($filename, $dir); // and here
    }
  } else {
    return (string)$filename;
  }
}

при условии, что это ваше намерение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...