2013-03-24 6 views
-1

$ filename 값을 할당하는 데 한 줄 밖에 없도록 어떻게이 코드를 리팩토링 할 수 있습니까? 이 하나간단한 리팩터링

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

:

$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

답변

1
$i = 1; 

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

지금까지 최선의 대답 –

0

그냥 다음 코드를 대체 당신이 명확한 대답을 원하는 경우

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

사전 증가 연산자를 사용해야합니다. –

+0

그래, 지금은 그들을 고정 혼란 스러워요 :-) – Nelson

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

어쩌면 doSomething()은 그것이 존재하지 않거나 그것의 이름이 무엇인지 모르는 파일 이름으로 뭔가를해야합니다. – baloo

+0

@baloo 더 명확하게 지정하지 않으면 알 수 없습니다. – deceze

+0

안녕하세요. doSomething() 실제로 파일 이름을 알아야합니다. 미안 해요 내가 그 명확하게하지 않았다 –

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

흥미로운 해결책이지만, 매우 모호합니다. 'glob'는 정렬 된 결과를 반환하도록 보장됩니까? 또한 이것은 doSomething()이 아니라는 것을주의하십시오; 나는 그것이 얼마나 중요한지 모른다. – deceze

+0

@deceze'glob'는 정렬 된 결과를 반환하지만,이 코드에서는 모든 검사를 호출해야한다면'while'이 필요하고'while '을 삽입 할 수 없으므로'doSomething()'을 삽입 할 수 없습니다. – pietroalbini