PHP从CSV文件中读取

时间:2015-12-02 16:30:24

标签: php csv

我有一个简单的CSV文件,如下所示:

Value:
AAA
Value:
BBB
Value:
AAA

我想计算某个值出现的次数(例如AAA)。 首先,我想得到“Value:”的行,然后回显下面一行“line [$ i + 1],这将是相应的值。 这是代码:

<?php

$file_handle = fopen("rowa.csv", "r");

$i = 0;

while (!feof($file_handle) ) {

$line_of_text = fgetcsv($file_handle, 1024);

$line[$i] = $line_of_text[0];


if($line[$i] == "Value:"){

echo $line[$i+1]."<br />";

}

$i++;
}

fclose($file_handle);

?> 

结果应如下所示:

AAA
BBB
AAA

不幸的是,这不起作用。它只是给了我“&lt; * br /”&gt; s

4 个答案:

答案 0 :(得分:0)

如果要在命令行或文件上打印,则需要使用\ n而不是<br/>。这仅适用于输出为HTML的情况。每次你想要移动两条线。逻辑应如下所示:

if($line[$i] == "Value:"){
    echo $line[$i+1]."\n"; // add a new line
}
$i+=2; // you want to move two lines

答案 1 :(得分:0)

这看起来不像普通的日常CSV文件,但这是一个应该有效的例子。

$fh     = fopen('rowa.csv', 'r');
$OUT    = array();
$C      = 0;
while( ! feof($fh) ) {
    // read 1 line, trim new line characters.
    $line = trim(fgets($fh, 1024));
    // skip empty lines
    if ( empty($line) ) continue;
    // if it's a value line we increase the counter & skip to next line
    if( $line === 'Value:' ) {
        $C++;
        continue;
    }
    // append contents to array using the counter as an index
    $OUT[$C] = $line;
}
fclose($fh);
var_dump($OUT);

答案 2 :(得分:0)

这不是CSV文件。 file()命令会将文件行加载到数组中。 for循环每隔一行打印一次。

$lines = file("thefile.txt");
for ($i = 1; $i < count($lines); $i = $i + 2) {
    echo $lines[$i] . "<br/>" . PHP_EOL;
}

答案 3 :(得分:-1)

PHP.net示例所示,您可以使用此修改后的代码:

<?php
    $count = 0;

    if (($handle = fopen("test.csv", "r")) !== FALSE)
    {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
        {
            $num = count($data);

            for ($c=0; $c < $num; $c++)
            {
                if (!strcmp($data[$c], 'Value:')) continue;
                if (!strcmp($data[$c], 'AAA')) $count++;

                echo $data[$c] . "<br />\n";
            }
        }

        fclose($handle);
    }
?>

<强>更新

尝试这个新代码,我们使用值作为数组键并增加&#34;键&#34;的计数。

<?php
    $counts = array();

    if (($handle = fopen("test.csv", "r")) !== FALSE)
    {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)
        {
            $num = count($data);

            for ($c=0; $c < $num; $c++)
            {
                if (strcmp($data[$c], 'Value:'))
                {
                    if (!isset($counts[$data[$c]]))
                    {
                        $counts[$data[$c]] = 0;
                    }

                    $counts[$data[$c]]++;
                }

                else
                {
                    // Do something
                }
            }
        }

        fclose($handle);
    }

    var_dump($counts);
?>

您可以像这样打印数组:

foreach ($counts as $key => $count)
{
    printf('%s: %d<br/>' . "\n", $key, $count);
}