-1

以下のコードは、ディレクトリ内のすべての.csvファイルのリストを取得します。各ファイルからいくつかの情報(列3のすべての値の合計)を抽出し、それを各リスト項目内に挿入する関数csvcolumnsumを作成しました。

html出力は次のようになります。

<li>Filename (sum)</li>

しかし、それは次のようになります。

sum<li>Filename ()</li>

なぜこれが起こっているのか誰かが指摘できますか?関連するコードは次のとおりです。

require("csvcolumnsum.php");

echo "<ul class=\"users\">";
$handle=opendir("data");
while (($file = readdir($handle))!==false) {
    $file = preg_replace("/\\.[^.\\s]{3}$/","",$file);
    if (preg_match('/[^\.]/i', $file)) {
        $value = csvcolumnsum("data/".$file.".csv",3);
        echo "<li><a href=\"?form_name=$file\">$file(";
        echo $value;
        echo ")</a></li>";
    }
}
closedir($handle);
echo "</ul>";

csvcolumnsum.php

function csvcolumnsum($filename,$col) {
    $handle2 = fopen($filename, 'r');
    $data = fgetcsv($handle2);

    foreach ($data as $headercolumn) {}
    while ($data = fgetcsv($handle2)) {
        $sum += $data[$col];
    }

    echo "<span>$sum</span>";

    fclose($handle2);
}
4

3 に答える 3

2

それはどのようにecho機能するかではありません。関数が呼び出し元の関数に値を伝達するようにしたい場合、関数は次returnの値ではなく、値を伝達する必要がありますecho

return "<span>$sum</span>";

Echoは標準出力に直接書き込みます。つまり、次の行を意味します。

$value = csvcolumnsum("data/".$file.".csv",3);

これらの行の前に印刷します。

echo "<li><a href=\"?form_name=$file\">$file(";
echo $value;
echo ")</a></li>";

戻ると、現在の関数の実行が停止します。つまり、:closeの前に実行する必要があります。return

function csvcolumnsum($filename,$col) {
    $handle2 = fopen($filename, 'r');

    # ...

    fclose($handle2);

    return "<span>$sum</span>";
}
于 2012-05-24T14:50:14.293 に答える
1

関数に参加していませechoん。returncsvcolumnsum

于 2012-05-24T14:50:15.227 に答える
1

あなたはそれを返さなければならない合計をエコーし​​ます、

function csvcolumnsum($filename,$col) {
    $handle2 = fopen($filename, 'r');
    $data = fgetcsv($handle2);

    foreach ($data as $headercolumn) {}
    while ($data = fgetcsv($handle2)) {
        $sum += $data[$col];
    }

    return "<span>$sum</span>";

    fclose($handle2);
}
于 2012-05-24T14:51:19.773 に答える