1

ディレクトリを読み取り、各ファイルのファイルサイズを取得したい。次のコードを試しました:

$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
}

そのため、現在、配列とループを使用した作業について静かに混乱しています。また、ファイル名とそれに対応するファイルサイズを 1 つの配列に保存するとよいでしょう。

ご提案いただきありがとうございます。

4

3 に答える 3

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/>';
}
于 2012-09-26T13:04:40.337 に答える
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.";
}
于 2012-09-26T13:05:13.670 に答える
0

値を割り当てる場合:

foreach($downloads as $value) {
$size = filesize("downloads/".$value);
エコー($サイズ); // この時点でエコーは正しく動作し
ます }

「サイズ」の特定のレコードに追加する必要があります

$size[ $n ] = filesize( ... );
于 2012-09-26T13:04:50.430 に答える