[PHP-users 26199] Re: 重複データの非表示
info @ goki.org
info @ goki.org
2005年 7月 17日 (日) 23:59:57 JST
はじめまして。高橋と申します。
言語によらずこのような処理を順次行う場合はBreakさせたい項目が
出現する順番で並んでないとうまくいきません。
ファイルを読み込んでソートしてからBreakしたい項目が変化したときに
処理をしBreakする項目を保存します。
考えられているスクリプトはnameはその処理をしてますがcolorの処理を
していないのでうまくいかないのかと思います。
PHPには連想配列という配列がありますのでこれを使うのも手です。
echo "<table border=1>";
echo "<tr><td>name</td><td>color</td><td>size</td></tr>";
$log = file('test.dat');
foreach ($log as $val) {
list($no, $name, $color, $size) = explode(",", $val);
$arrItem[$name][$color][$size]++;
}
foreach ($arrItem as $name => $arrColor) {
$nm = "<tr><td>".$name."</td>";
foreach ($arrColor as $color => $arrSize) {
echo $nm."<td>".$color."</td>";
echo "<td>";
$c = 0;
foreach ($arrSize as $size => $cnt) {
echo ($c == 0 ? "":",").$size;
$c++;
}
echo "</td></tr>";
}
}
連想配列はname,color,sizeの3次元になってしまいますが。
各項目が重複してもうまくいくと思います。
出力順はファイルの順序にに依存しますので$arrItemを適宜
ソートしてみてください。
PHP-users メーリングリストの案内