web-dev-qa-db-ja.com

選択した値が表示されていない選択ドロップダウンphp

私はWordpress Settings APIを使っています。このselectドロップダウンを除いて、すべてが正常に機能します。オプションを選択すると、エコーされた値は正しいですが、ドロップダウンにはデフォルトの最初の値、つまり6が表示され、選択した値は表示されません。どこが悪いの?

 public function someplugin_select() {
            $options = get_option( 'plugin_252calc');
            echo $options; //shows the correct value selected
            $items = array();
            for ($i=6; $i <=10; $i+= 0.1) 
            { 
                $items[] = $i;
            }

            echo '<select id="cf-nb" name="cf-nb">';
            foreach ( $items as $item )
            {
                echo '<option value="'. $item .'"';
                if ( $item == $options ) echo' selected="selected"';
                echo '>'. $item .'</option>';
            }

            echo '</select>';           

        }
2
input

$item == $option条件が常に失敗するのは、PHPがフロートを比較する方法が原因です。

代わりに次のことを試してください。

echo "<option value='$item'" . selected (abs ($item - $options) <= 0.01, true, false) . ">$item</option>" ;

詳しくは フロートの比較 をご覧ください。

私はこれを経験しました、そして私はあなたがこの link で見ることができるselectedと呼ばれるWP関数があると言うことができます。 if ( $item == $options )の代わりにこの関数を使用してください。そしてあなたのコードは次のようになります。

foreach ( $seconds as $second => $time ) {
   ?>
      <option value="<?php echo $second; ?>" <?php selected( $browser_cache_ttl, $second ); ?>><?php echo $time; ?></option>
   <?php
}

そのため、関数は$secondsをループして$second$timeを取得し、te $secondを値として設定します。次に、最初のパラメータが比較対象の値で、2番目のパラメータが現在の値です。選択されます。

私はそれがあなたが探しているものだと思います。うまくいったら教えてください。

0
Roel Magdaleno

これであなたの選択を置き換えてください。

        echo '<select id="cf-nb" name="cf-nb">';
        foreach ( $items as $item ){
            $if_selected = $item == $options ? "selected='selected'" : "";
            echo "<option value='{$item}' {$if_selected}>$item</option>";

        }

        echo '</select>'; 
0