php 是否简化if语句?

h79rfbju  于 2023-03-07  发布在  PHP
关注(0)|答案(4)|浏览(138)

有什么好的方法可以减少或简化下面的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>
6ioyuze2

6ioyuze21#

您可以使用动态变量设置,但不推荐使用!请参阅下一个示例以了解正确使用方法。

$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
一个二个一个一个

eimct9ow

eimct9ow2#

也许创建一个函数并传入选项会更简洁,然后只是测试该选项是否设置并返回相应的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>
flmtquvp

flmtquvp3#

你也可以这样做:

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

7tofc5zh4#

你可以试试这个:

$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"';
}

相关问题