[PHP-users 26197] Re: 重複データの非表示

ship ship @ shipweb.jp
2005年 7月 17日 (日) 23:20:16 JST


ムラカミさん

こんばんは。シップです。
以下のようなコードでどうでしょう?

<?php
print "<table border=1>";
print "<tr><td>name</td><td>color</td><td>size</td></tr>";
$log = file('double.txt');
for ($i=1; $i<count($log); $i++) {
	list($no,$name,$color,$size) = explode(",", $log[$i]);
	//if (!$oya || $oya != $name) {
		//print "<tr><td>$name</td>"; // 親(先頭)データの部分
		$oya = $name;
		$a_name[$name] = "1";
		$a_color[$name][$color] = "1";
		$a_size[$name][$size] = "1";
	//}
	//$color2 .= $color . ' / '; // この子データからの部分がどうもうまくいきません。
	//$size2 .= $size . ' / ';
	//print "<td>$color2</td>";
	//print "<td>$size2</td></tr>";
}

foreach($a_name as $key => $val){
	$ak_color = array();
	$ak_size = array();	print "<tr><td>$key</td><td>";
	foreach($a_color[$key] as $key1 => $val1){
		$ak_color[] = $key1;
	}
	print implode (",",$ak_color);
	print "</td><td>";
	foreach($a_size[$key] as $key1 => $val1){
		$ak_size[] = $key1;
	}
	print implode (",",$ak_size)."</td></tr>";

}

print "</table>";
?>

On 2005/07/17, at 22:26, ムラカミ wrote:

> こんばんは、ムラカミと申します。
> PHPは今年に入ってから始めたばかりの初心者ですが、よろしくお願いします。
>
> 早速ですが、以下のようなデータ(test.dat)があります。
> バージョンはPHP4.03で、データを整形する作業をしています。
>
> ================================
> 1,desk,red,S
> 2,desk,blue,S
> 3,desk,red,M
> 4,desk,blue,M
> 5,desk,green,M
> 6,chair,red,S
> 7,chair,blue,S
> 8,chair,green,S
> 9,chair,blue,M
> 10,chair,white,L
> ================================
>
> このデータを以下のような表にするにはどのようにしたら良いのでしょうか?
>
> ================================
> name | color          | size
> --------------------------------
> desk  | red,blue,green    | S,M
> --------------------------------
> chair | red,blue,green,white | S,M,L
> ================================
>
> まず、「name」を親キーにし、ループをかけることで「name」の重複を表示させないようには出来たのですが、「color」と「size」の部 
> 分がどうもうまくいきません。
> 同じものがどんどん重複し、データ数分の行が出来上がります。
> 稚拙なコードですいません。
>
> <?
> echo "<table border=1>";
> echo "<tr><td>name</td><td>color</td><td>size</td></tr>";
> $log = file('test.dat');
> for ($i=1; $i<count($log); $i++) {
>   list($no,$name,$color,$size) = explode(",", $log[$i]);
>   if (!$oya || $oya != $name) {
>    echo "<tr><td>$name</td>"; // 親(先頭)データの部分
>    $oya = $name;
>   }
>   $color2 .= $color . ' / '; // この子データからの部分がどうもうまくいきません。
>   $size2 .= $size . ' / ';
>   echo "<td>$color2</td>";
>   echo "<td>$size2</td></tr>";
> }
> echo "</table>";
> ?>
>
> どうぞお力添え、アイデア、ご助言のほどよろしくお願いします。
>
> ムラカミ
>
>
> _______________________________________________
> PHP-users mailing list  PHP-users @ php.gr.jp
> http://ns1.php.gr.jp/mailman/listinfo/php-users
> PHP初心者のためのページ - 質問する前にはこちらをお読みください
> http://www.php.gr.jp/php/novice.php3
>
>



PHP-users メーリングリストの案内