我有一个简单的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
答案 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);
}