-1

下面的代码获取目录中所有 .csv 文件的列表。我创建了函数csvcolumnsum来从每个文件中提取一些信息(第 3 列中所有值的总和)并将其注入每个列表项中。

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

你回应你必须归还的总和,

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 回答
1

您不在echo函数returncsvcolumnsum

于 2012-05-24T14:50:15.227 回答