PHPの質問です

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

回答の条件
  • 1人5回まで
  • 登録:
  • 終了:2013/09/12 13:19:41
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。
id:takanii
<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>

ベストアンサー

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149

ポイント300pt

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

<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件)

id:windofjuly No.1

回答回数2625ベストアンサー獲得回数1149ここでベストアンサー

ポイント300pt

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

<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>

コメントはまだありません

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません