我想读取一个目录并获取每个文件的文件大小。 我尝试了以下代码:
$downloads = array_slice(scandir("downloads"),2);
$size = array();
foreach($downloads as $value) {
$size = filesize("downloads/".$value);
echo($size); //at this point the echo works correctly
}
echo($size); //shows the filesize of the first file
echo($size[1]) //nothing happens
foreach($size as $value) {
echo($value); //nothing happens
echo($size); //nothing happens
}
这就是为什么我现在对数组和循环的工作感到困惑。 将文件名及其相应的文件大小保存在一个数组中也是很好的。
感谢您的建议。
答案 0 :(得分:2)
你做错了。你在foreach中覆盖了数组。
foreach($downloads as $value) {
$size = filesize("downloads/".$value);
// $size is not an array anymore, just an int
echo($size); //at this point the echo works correctly
}
这应该是正确的:
foreach($downloads as $value) {
$size[] = filesize("downloads/".$value);
}
完整代码:
$downloads = array_slice(scandir("downloads"),2);
$size = array();
foreach($downloads as $value) {
$size[] = filesize("downloads/".$value);
}
foreach($size as $value) {
echo($value).'<br/>';
}
答案 1 :(得分:1)
您不断覆盖$size
变量,这就是每次执行foreach
时都不会执行的原因。
您应该创建一个$size
数组并相应地存储所有内容:
$size = array();
foreach ( $downloads as $file ) {
$size["downloads/".$file] = filesize("downloads/".$file);
}
foreach ( $size as $fname => $fsize) {
echo "Size of " .$fname. " is " .$fsize. " bytes.";
}
答案 2 :(得分:0)
分配值时:
foreach($下载为$ value){
$ size = filesize(“downloads /".$ value);
回波($大小); //此时回声正常工作
}
您需要将其添加到“尺寸”的特定记录
$size[ $n ] = filesize( ... );