提问人:fmineo 提问时间:3/14/2015 最后编辑:fmineo 更新时间:3/14/2015 访问量:410
PHP:当特定值相等时对 csv 行进行分组 [closed]
PHP: Grouping csv lines when a specific value is equal [closed]
问:
不要以为这很难,但经过一天的辛苦工作,我无法解决这个微不足道的问题。 我有一个简单的csv文件,我必须通过php显示,从列的值对行进行分组。 我们具体去:
这是我的CSV文件:
15000,art1,black
15000,art1,white
15000,art1,green
20000,art2,black
20000,art2,white
25000,art3,black
这就是我想打印的内容:
15000-art1-black
15000-art1-white
15000-art1-green
--- Found black,white,green ---
20000-art2-black
20000-art2-white
--- Found balck,white ---
25000-art3-black
--- Found black ---
我的出发点是这样的:
<?php
$Export= fopen("Test.csv", "r");
while(!feof ($Export)){
$riga=fgets($Export, 4096);
if($riga!=""){
$data=split(',',$riga);
foreach ($data as $line) {
$val = explode(",", $line);
$code = $val[0];
$art_n = $val[1];
$color = $val[2];
}
}
}
fclose($Export);
?>
答:
0赞
bladerz
3/14/2015
#1
这是你的 php 代码的修改版本,可以做你想做的事:
<?php
$Export= fopen("Test.csv", "r");
$found=array();
$lastart="";
while(!feof ($Export)){
$riga=fgets($Export, 4096);
$riga = str_replace(PHP_EOL, '', $riga);
if($riga!=""){
$val = explode(",", $riga);
$code = $val[0];
$art_n = $val[1];
if ( $lastart != $art_n && $lastart != "") {
foreach ( $found as $col ) {
@$colorfound.=$col.",";
}
$colorfound = rtrim($colorfound, ",");
echo "--- Found $colorfound ---\n";
unset ($found);
$colorfound = "";
}
$color = $val[2];
$found[] = $color;
echo "$code-$art_n-$color\n";
$lastart = $art_n;
}
}
//The last art_n
foreach ( $found as $col ) {
@$colorfound.=$col.",";
}
$colorfound = rtrim($colorfound, ",");
echo "--- Found $colorfound ---\n";
fclose($Export);
?>
1赞
robbmj
3/14/2015
#2
<?php
if (($handle = fopen("Test.csv", "r"))) {
$lines = array();
while (($columns = fgetcsv($handle))) {
$number = $columns[0];
$colour = $columns[2];
if (!isset($lines[$number])) {
$lines[$number] = array('instances' => array(), 'colours' => array());
}
$lines[$number]['instances'][] = $columns;
$lines[$number]['colours'][$colour] = 1;
}
fclose($handle);
foreach ($lines as $number => $line) {
foreach ($line['instances'] as $instance) {
echo implode('-', $instance) . "\n";
}
echo "--- Found " . implode(',', array_keys($line['colours'])) . " ---\n";
}
}
输出:
15000-art1-black
15000-art1-white
15000-art1-green
--- Found black,white,green ---
20000-art2-black
20000-art2-white
--- Found black,white ---
25000-art3-black
--- Found black ---
评论