人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

PHPの質問です
以下のプログラムを組んでいただいたのですが
これを実行した時 1回が2つセレクトボックスに出てしまいます。
重複しているものを削除したいのですがどこをいじればいいでしょうか?
あと、一番最後のoptionには selected="selected" を追加して欲しいのですが
その場合どこをいじればいいでしょうか?

●質問者: takanii
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 1/1件

▽最新の回答へ

質問者から
<html><body>
<?php
 $s = '';
 $b = strip_tags( @file_get_contents( __FILE__ ), '<tr><td>');
 if ( preg_match_all("#<tr[^<]+?(.+?)</tr#is", $b, $trs , PREG_SET_ORDER) ) {
 $s = '<select name="kai1">' . "\n";
 foreach( $trs as $tr ) {
 if ( preg_match_all("#<td[^<]+?(.+?)</td#is", $tr[1], $tds , PREG_SET_ORDER) ) {
 $s .= '<option value="' .$tds[0][1]. '">' .$tds[0][1] . '回</option>' . "\n";
 }
 }
 $s .= '</select>' . "\n";
 }
 echo ( $s );
?>
<TABLE>
<tr>
<td>1</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
</TABLE></body></html>

1 ● うぃんど
●300ポイント ベストアンサー

重複削除と末尾だけ別扱いということで、
アレイに蓄積→重複削除→末尾だけ調整→出力という流れに変えてみました。

<html><body>
<?php
 $s = '';
 $b = strip_tags( @file_get_contents( __FILE__ ), '<tr><td>');
 if ( preg_match_all("#<tr[^<]+?(.+?)</tr#is", $b, $trs , PREG_SET_ORDER) ) {
 $a = array();
 foreach( $trs as $tr ) {
 if ( preg_match_all("#<td[^<]+?(.+?)</td#is", $tr[1], $tds , PREG_SET_ORDER) ) {
 $a[] = '<option value="' . $tds[0][1] . '">' . $tds[0][1] . '回</option>';
 }
 }
 $a = array_unique( $a, SORT_REGULAR );
 $a[] = preg_replace( '#([^>]+?)>(.+)#', '$1 selected="selected">$2', array_pop( $a ) );
 $s = '<select name="kai1">' . "\n";
 $s .= join( $a, "\n" ) . "\n";
 $s .= '</select>' . "\n";
 }
 echo ( $s );
?>
<TABLE>
<tr>
<td>1</td>
</tr>
<tr>
<td>1</td>
</tr>
<tr>
<td>2</td>
</tr>
<tr>
<td>3</td>
</tr>
</TABLE></body></html>
関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ