2017-04-05 94 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; 
} 

工作正常,但我需要在返回前將$ size除以2。

如果我'返回$ 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將被再次劃分爲上部目錄計數的一部分。 你可以將這個函數包裝在另一個將要分割最後一次並返回的函數中。在這種情況下,跟蹤目錄深度似乎對我來說太過於開銷,儘管這也是一種選擇。