2013-03-24 52 views
-1

我如何重构这个代码,所以我只有1行分配$文件名值。简单的重构

$i = 1; 
$filename = $config->PHOTO_PATH . $list->ID . "_" . $i . ".jpg" 
while(file_exists($filename)) 
{ 
    doSomething(); 
    $i++; 
    $filename = $config->PHOTO_PATH . $list->ID . "_" . $i . ".jpg"; 
} 
+1

如果你想有一个明确的答案,说明这是什么应该做的。我想你试图找到一个没有找到的文件名,但是'doSomething()'做了什么? – deceze 2013-03-24 16:50:06

回答

1
$i = 1; 

$ok=true; 
while($ok) 
{ 
    $filename = $config->PHOTO_PATH . $list->ID . "_" . $i++ . ".jpg"; 
    $ok=file_exists($filename) 
    if ($ok){ 
     doSomething(); 
    } 
} 
+0

最佳答案至今 – 2013-03-25 09:05:54

0

只需更换你的下面的代码:

$i++; 
$filename = $config->PHOTO_PATH . $list->ID . "_" . $i . ".jpg"; 

这一个:

$filename = $config->PHOTO_PATH . $list->ID . "_" . ++$i . ".jpg"; 
+3

应该可能使用预增加运算符。 – 2013-03-24 16:42:36

+0

是的,我却把它们,现在固定的,thaks为察觉它:-) – Nelson 2013-03-24 16:43:43

0
$i = 1; 
do { 
    doSomething(); 
    $filename = sprintf('%s%s_%d.jpg', $config->PHOTO_PATH, $list->ID, $i++); 
} while (file_exists($filename)); 
+0

也许DoSomething的()应该是,如果它还不存在或做什么用的文件名的东西,它不知道它的名字是否 – baloo 2013-03-24 16:46:52

+0

@baloo除非有更明确的说明,否则我们不会知道。 – deceze 2013-03-24 16:47:36

+0

你好。 doSomething()确实需要知道文件名。对不起,我没有说清楚 – 2013-03-25 09:04:35

1
$filename = 'prefix' . 
      (preg_replace('/prefix([0-9]+)suffix/', '$1', array_pop(glob('prefix*suffix'))) + 1) . 
      'suffix'; 
+0

有趣的解决方案之前,尽管存在一些非常模糊。是否保证'glob'返回排序结果?还要注意,这不是'doSomething()';我不知道这真的有多重要。 – deceze 2013-03-24 17:13:31

+0

@deceze'glob'返回排序结果,但在此代码不能插入'DoSomething的()',因为它需要一个'while'如果必须调用每次检查,并在一条线上,你不能插入一段时间。 – pietroalbini 2013-03-24 17:20:03