首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组的DirectoryIterator、array_pop和foreachloop

数组的DirectoryIterator、array_pop和foreachloop
EN

Stack Overflow用户
提问于 2011-08-27 07:00:40
回答 1查看 420关注 0票数 0

我有一个片段

代码语言:javascript
复制
$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());
    }
}

这会将它找到的每个文件夹放到我的数组中,但我的问题是它总是在数组的开头推送结果。

代码语言:javascript
复制
array([0]=>cluster_2, [1]=>cluster_1)

我想让它在数组的末尾按顺序推送文件夹。我尝试过array_pop,但我不确定如何在这种情况下使用它。

构建阵列后,我想扫描每个阵列,看看还剩下多少可用空间

代码语言:javascript
复制
foreach ($cluster_array as $cluster) {
    echo $cluster . " " . Server::server_free_space("/agents/" . $cluster, 2)."<br />";
}

这个类方法只使用disk_free_space(),然后为我将结果转换为MB。

为了代替echo语句,我打算这样做:

代码语言:javascript
复制
if ((Server::server_total_space("/agents/" . $cluster, 2) / 3) > xMB) {

}

我想在数组中有xMB可用的第一个项中创建一个文件夹,如果xMB不可用,则移动到下一个数组项,依此类推,直到它找到一个具有创建新文件夹所需空间的数组项。

这有意义吗?

编辑:

我最终这样做了,有点像手动构建数组

代码语言:javascript
复制
$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);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-08-27 07:09:43

您正确地使用了array_push(),但是DirectoryIterator和相关迭代器会按照操作系统提供的方式迭代底层文件系统的项。这不一定是按照人们期望的方式排序的(例如,自然排序)。有关这方面的更多信息,请参阅此faux bug report

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7211334

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档