2011-08-26 22 views
0

的foreach循環我有這個片段DirectoryIterator和array_pop和陣列

$clusters = new DirectoryIterator("/agents/"); 
$cluster_array = array(); 

# Push each cluster into an array 
foreach ($clusters as $fileinfo) { 
    if ($fileinfo != "." && $fileinfo != ".." && $fileinfo != "conf") { 
     array_push($cluster_array, $fileinfo->getFilename()); 
    } 
} 

這使找到的每個文件夾到我的數組,但我的問題是,它保持在數組的開頭推動的結果。

array([0]=>cluster_2, [1]=>cluster_1) 

我希望它在數組末尾按順序推送文件夾。我試過array_pop,但我不確定如何在這種情況下使用它。

我有我的陣列建成以後,我想通掃描每個陣列,看看有多少可用空間留給

foreach ($cluster_array as $cluster) { 
    echo $cluster . " " . Server::server_free_space("/agents/" . $cluster, 2)."<br />"; 
} 

該類方法只使用disk_free_space()然後將成果轉化爲MB轉換對我來說。

就地echo語句我打算做類似

if ((Server::server_total_space("/agents/" . $cluster, 2)/3) > xMB) { 

} 

的,我想創建一個文件夾到具有可用XMB數組中的第一個項目,如果XMB不可用,移到下一個數組項目上,依此類推,直到找到一個具有創建新文件夾所需空間的數組項目。

這是否有意義?

編輯:

我結束了這個還挺手工做的構建陣列

$clusters = new DirectoryIterator("/agents/"); 
$cluster_array = array(); 
$cluster_count = 0; 

# Push each cluster into an array 
foreach ($clusters as $fileinfo) { 
    if ($fileinfo != "." && $fileinfo != ".." && $fileinfo != "conf") { 
     array_push($cluster_array, "cluster_" . $cluster_count += 1); 
    } 
} 
+0

那麼你卡在什麼錯誤你收到,或者這只是另一個代碼我的問題?只需使用:sort($ cluster_array)對其進行排序。 –

+0

,只是返回1,如果我做了print_r就可以了。並沒有它不是一個代碼我的問題,它幫助我建立我的編碼邏輯問題;-) – Eli

+0

@ s2xi:sort($ cluster_array);'通過引用改變數組,並返回一個布爾值,而不是排序的數組。在函數調用後執行'print_r($ cluster_array);',你會看到一個有序數組。 –

回答

0

您正確使用array_push(),但是DirectoryIterator和相關的迭代器遍歷底層文件系統的項目,方式操作系統提供它們。這不一定按照人們預期的方式排序(例如自然排序)。有關這方面的更多信息,請參閱faux bug report

+0

啊,我以爲也許這是有關的東西。也許array_shift會做的伎倆 – Eli

+0

@ s2xi:不,你需要排序他們之後的一些排序功能,例如像[勞倫斯Cherone](http://stackoverflow.com/questions/7211334/directoryiterator-and-array -pop-and-foreachloop-of-array/7211375#comment-8665058)建議 –