首页 > 解决方案 > 将目录名称和文件夹大小保存为二维数组

问题描述

我使用此代码在 HTML 表中打印子文件夹名称和大小,我想做的是将此表保存为二维数组,以便可以按文件夹大小排序(因为现在按字母名称顺序排序)

<?php

$directory = "F:/directory";

echo "<table>";
$depth = 0;
$count = 0;

$ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
$r = array();
foreach ( $ritit as $splFileInfo ) {
    $count +=1;
    if ($ritit->getDepth() === $depth && $splFileInfo->isDir()) {
        echo "<tr><td>".stripslashes($splFileInfo)."</td>";
        echo "<td>".getSize($splFileInfo)."</td></tr>";
    }
}
echo "</table>";
function getSize($dir, $precision = 2) {
    $ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS));
    $bytes = 0;
    foreach ( $ritit as $v ) {
        $bytes += $v->getSize();
    }
    $bytes = max($bytes, 0);
    return round($bytes, $precision) . ' ';
}
?>

这是左侧的文件夹名称和右侧的文件夹大小的 HTML W

标签: phphtml

解决方案


将文件名存储为键,将文件大小存储为 $r 2D-array 中的值。使用 sort 函数使用 value 对数组进行排序。

这是对数组进行排序的链接:https ://www.w3schools.com/php/php_arrays_sort.asp

<?php

$directory = "F:/directory";

echo "<table>";
$depth = 0;
$count = 0;

$ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directory, RecursiveDirectoryIterator::SKIP_DOTS), RecursiveIteratorIterator::CHILD_FIRST);
$r = array();
foreach ( $ritit as $splFileInfo ) {
    $count +=1;
    if ($ritit->getDepth() === $depth && $splFileInfo->isDir()) {
        // echo "<tr><td>".stripslashes($splFileInfo)."</td>";
        // echo "<td>".getSize($splFileInfo)."</td></tr>";
        $r[stripslashes($splFileInfo)] = getSize($splFileInfo);
    }
}

// sort the associative array using the value.
asort($r);

foreach($r as $key => $value) {
    echo "<tr><td>".$key."</td>";
    echo "<td>".$value."</td></tr>";
}

echo "</table>";
function getSize($dir, $precision = 2) {
    $ritit = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS));
    $bytes = 0;
    foreach ( $ritit as $v ) {
        $bytes += $v->getSize();
    }
    $bytes = max($bytes, 0);
    return round($bytes, $precision) . ' ';
}
?>

推荐阅读