0

我目前正在使用 php 打开一个 csv 文件,检查包含特定内容的单元格并使用 if-else 来获取特定信息。但是,我需要检查一个单元格是否包含某些信息的一部分。

例如

当前代码:

$error_handle = fopen("$reportUrl", "r");
while (!feof($error_handle) )
{
    $line_of_text = fgetcsv($error_handle, 1024);
    if($line_of_text[0] !== "")
        {
            $countErrors++;
        }
}
fclose($error_handle);

我想要的代码:

$error_handle = fopen("$reportUrl", "r");
while (!feof($error_handle) )
{
    $line_of_text = fgetcsv($error_handle, 1024);
    if($line_of_text[4] == "$date *")
        {
            $countErrors++;
        }
}
fclose($error_handle);

'*' 表示每行文本的时间不同,因此不能使用,但它是同一单元格的一部分。如何选择日期相同但时间不同的单元格?

仅供参考,日期格式通常为 '15/01/2013 12:06pm'

4

4 回答 4

1

使用strpos函数:

if(strpos($line_of_text[4], "$date ") ===0) { found }

想我已经明白了:

我正在使用以下内容:

        while (!feof($error_handle) )
        {
            $line_of_text = fgetcsv($error_handle, 1024);
            if(strpos($line_of_text[4], $date) !== false)
                {
                    $countErrors++;
                }
        }
    fclose($error_handle);

这似乎正在工作

于 2013-01-16T13:59:23.247 回答
0

您可以将日期和时间的时间戳而不是“15/01/2013 12:06pm”或其他内容存储到文件中,以便您可以检索时间戳并根据需要格式化日期。

于 2013-01-16T14:05:57.353 回答
0
    while (!feof($error_handle) )
        {
            $line_of_text = fgetcsv($error_handle, 1024);
            if(strpos($line_of_text[4], $date) !== false)
                {
                    $countErrors++;
                }
        }
    fclose($error_handle);
于 2013-01-16T14:13:41.313 回答
0

您还可以SplFileObject将其设置为 CSV 模式,然后根据您的条件过滤行(单元格索引 4,您的$date字符串比较)和计数(请参阅 参考资料iterator_count):

$rows     = new SplFileObject($reportUrl);
$rows->setFlags($rows::READ_CSV);
$filtered = new CallbackFilterIterator($rows, function ($current) use ($date) {
    return strpos($current[4], "$date ") === 0;
});
$countErrors = iterator_count($filtered);
于 2013-01-16T14:26:47.497 回答