2013-03-24 86 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