2017-04-05 11 views
1

디렉토리 내의 파일 수를 계산하는 데 사용하는 PHP 함수가 있습니다.함수 내에서 기본 연산이 작동하지 않습니다.

function getFileCount($path) { 
$size = 0; 
$ignore = array('.','..','cgi-bin','.DS_Store'); 
$files = scandir($path); 
foreach($files as $t) { 
    if(in_array($t, $ignore)) continue; 
    if (is_dir(rtrim($path, '/') . '/' . $t)) { 
     $size += getFileCount(rtrim($path, '/') . '/' . $t); 
    } else { 
     $size++; 
    } 
} 
return $size; 
} 

제대로 작동하지만 반환하기 전에 $ 크기를 2로 나누어야합니다.

'return $ size/2;' 60은 22.5가됩니다. 72는 19.125가된다. 그것은 나에게 이해가되지 않는다. 나는 또한 intdiv()를 시도하고 0.5 배로 시도해 보았습니다. 그리고 나는 다양한 결과를 얻었지만 그 중 아무 것도 올바른 것은 아닙니다.

나는 이것이 아마도 매우 기본적인 것으로 알고 있습니다.

함수 밖에서 나눗셈을하면 제대로 작동하지만 정수를 반환하기 전에 처리하려고합니다.

+1

당신은 재귀 적으로 호출하기 때문에 일부 결과는 여러 번 나뉘어집니다. –

+0

배열을 계산하고 정적을 뺍니다. 나는 루프의 추가 작업을 저장할 것이라고 생각한다. –

+0

아득히 내가 서브 디렉토리 내에서 파일을 재귀 적으로 필요로 할 수 있다고 계산할 수있다. $ size의 최종 반환 값에 나누기를 적용하는 방법이 있습니까? – Koda

답변

0

래퍼 함수를 ​​만들 수 있습니까?

function getFileCountDivided($path) { 
    return getFileCount($path)/2; 
} 
+0

방금 ​​시도한이 잘못된 값 (60/2 = 22.5 등)도 반환합니다. – Koda

+0

$ x = getFileCount ($ path); var_dump ($ x); 나는 int 60을 얻었고, 그것은 나에게 잘 나누어졌다. – bumperbox

+0

작동하지만 int()가 출력된다. 그걸 피할 ​​길이 있습니까? – Koda

0

아마도 재귀 때문에 서브 디렉토리 카운트를 2로 나눈 값이 상위 디렉토리 카운트의 일부로 다시 나누어지게됩니다. 이 함수는 최종 계수를 한 번 나누어 반환 할 다른 함수로 래핑 할 수 있습니다. 디렉토리 깊이를 추적하는 것은이 경우에 너무 많은 오버 헤드처럼 보일 수 있습니다.