我尝试设置默认单选按钮(如果尚未选中)。
$ p [' selected']告诉您之前是否曾选择过一个。我几乎在那里使用下面的代码,但它始终将第一行设置为已选中。如果没有选中,我只希望发生这种情况。所以基本上我想查看是否有任何检查,如果没有,则设置默认值。它使用了PHP 5.2。
>>> from datetime import datetime
>>> diff = datetime(2012, 2, 28)-datetime(2012, 1, 1)
>>> diff.days
58
答案 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'] ) );
}