php 只在几个单选按钮中的一个上动态写入“checked”属性

hwamh0ep  于 2023-05-12  发布在  PHP
关注(0)|答案(5)|浏览(102)

有什么好方法可以减少或简化以下php函数来检查适用的输入字段?

<?php

  $options = get_option( 'navbar_style', '' );
  
  $right = $left = $fade = '';

  if( isset( $options['style'] ) ) {
    if( $options['style'] == 'right' ) {
      $right = ' checked="checked"';
    }
    if( $options['style'] == 'left' ) {
      $left = ' checked="checked"';
    }
    if( $options['style'] == 'fade' ) {
      $fade = ' checked="checked"';
    }
  }

  ?>

  <label><input type='radio' name='navbar_style[style]' value='right' <?php echo $right; ?> >Right <em>(Default)</em></label>
  <label><input type='radio' name='navbar_style[style]' value='left' <?php echo $left; ?> >Left</label>
  <label><input type='radio' name='navbar_style[style]' value='fade' <?php echo $fade; ?> >Fade</label>
ljo96ir5

ljo96ir51#

可以使用动态变量设置,但不推荐!请参见下一个正确使用示例。

$options['style'] = 'left';
$right = $left = $fade = '';

if (in_array($options['style'] ?? '', ['right', 'left', 'fade'])) {
    ${$options['style']} = ' checked="checked"';
}

var_dump($right, $left, $fade);
string(0) ""
string(18) " checked="checked""
string(0) ""

一个更简洁的方法是这个版本,例如使用$checks['left']而不是$left

$checks = [];
foreach (['right', 'left', 'checked'] as $check) {
    $checks[$check] = $options['style'] === $check ? ' checked="checked"' : '';
}

var_dump($checks);
array(3) {
  'right' =>
  string(0) ""
  'left' =>
  string(18) " checked="checked""
  'checked' =>
  string(0) ""
}
sgtfey8w

sgtfey8w2#

也许更紧凑的是创建一个函数并传入选项,那么它只是一个测试,看看该选项是否被设置并返回相应的html。。

function styleCheck($option, $options)
  {
      return ($options['style'] ?? '') == $option ? ' checked="checked"' : '';
  }
  ?>

  <label><input type='radio' name='navbar_style[style]' value='right'<?php echo styleCheck('right', $options); ?>>Right <em>(Default)</em></label>
  <label><input type='radio' name='navbar_style[style]' value='left'<?php echo styleCheck('left', $options); ?>>Left</label>
  <label><input type='radio' name='navbar_style[style]' value='fade'<?php echo styleCheck('fade', $options); ?>>Fade</label>
ozxc1zmp

ozxc1zmp3#

你也可以这样做:

$style = ['right' => '', 'left' => '', 'fade' => ''];
    
if (isset($options['style']) && array_key_exists($options['style'], $style)) {
    $style[$options['style']] = ' checked="checked"';
}
m528fe3b

m528fe3b4#

你可以试试这个:

$options = get_option( 'navbar_style', '' );
$styles = array('right', 'left', 'fade');

$checked = array_fill_keys($styles, '');
if(isset($options['style']) && in_array($options['style'], $styles)) {
  $checked[$options['style']] = 'checked="checked"';
}
uxh89sit

uxh89sit5#

作为一名程序员,您应该留意代码中的重复模式。很明显,有重复的HTML标记,只有最小的文本调整。D.R.Y的意思是“不要重复自己”。
创建这些动态数据点的数组,然后实现一个循环以生成所需的标记。这将有助于防止打字错误,并使您的脚本更容易维护。
代码:(Demo

$options = ['style' => 'left'];
  
$radios = [
    'right' => 'Right <em>(Default)</em>',
    'left' => 'Left',
    'fade' => 'Fade',
];

foreach ($radios as $value => $text) {
    printf(
        "<label><input type='radio' name='navbar_style[style]' value='%s'%s>%s</label>\n",
        $value,
        ($options['style'] ?? '') === $value ? ' checked' : '',
        $text
    );
}

相关问题