[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 メーリングリストの案内