默认情况下检查一个单选按钮,如果没有选中则已经是php

时间:2017-09-04 14:58:51

标签: php forms

我尝试设置默认单选按钮(如果尚未选中)。

$ p [' selected']告诉您之前是否曾选择过一个。我几乎在那里使用下面的代码,但它始终将第一行设置为已选中。如果没有选中,我只希望发生这种情况。所以基本上我想查看是否有任何检查,如果没有,则设置默认值。它使用了PHP 5.2。

>>> from datetime import datetime
>>> diff = datetime(2012, 2, 28)-datetime(2012, 1, 1)
>>> diff.days
58

1 个答案:

答案 0 :(得分:1)

你需要做一次"预检查" $options确定是否有任何设置。否则,$i == 0将始终在您的循环中发生,无论是否已选择其中一个选项。

// Filters all elements of `$options`, and only returns those that have `selected` set and truthy
$has_checked = array_filter( $options, function( $p ) {
    return ( ! empty( $p['selected'] ) );
});

// Sets to boolean - true if any of the $options were checked, false otherwise
$has_checked = ( ! is_empty( $has_checked ) );

然后,在你的循环中:

$i = 0;
foreach($options as $p): 
    // move this here to simplify the if statement
    $checked = '';

    if($p['selected']) { 
        $checked = 'checked';
    // only set in this case if $has_checked is false
    } elseif ( ! $hash_checked && 0 === $i++ ) { 
        $checked = 'checked';
    } 
....

如果需要,可以将 组合成这样:

    if($p['selected'] || ( ! $hash_checked && 0 === $i++ ) ) { 
        $checked = 'checked';
    } 

并且,您可以从while循环结束时删除$i++

非常旧版本的PHP(早于5.3)的更新
OP使用PHP 5.2,它不支持匿名功能(在5.3中可用)。以下是解决方法:

// Filters all elements of `$options`, and only returns those that have `selected` set and truthy
$has_checked = array_filter( $options, 'has_checked' );

function has_checked( $p ) {
    return ( ! empty( $p['selected'] ) );
}