<?php
$arr = array(
0 => array('id'=>12,'name'=>'NO.1'),
1 => array('id'=>13,'name'=>'NO.2'),
);$_check_id = 0;
if($arr) {
foreach($arr as $v){
?>
<input type="radio" name="c" id="d_<?php echo $v['id']?>" value="<?php echo $v[id]?>" /><?php echo $v['name']?><br>
<?php 
}
}?>程序初始状态为上。
注意$_check_id是三种状态,第一种是为0,即$_check_id=0,第二种是有值,但与数组中的id不相等,即$_check_id=2,第三种状态是:$_check_id与数组中的id相等现在要求在循环的时候$_check_id 与 数组中id对比
如果相等,将input中的radio选中,即状态为checked
如果不相等,则将循环出来的第一个radio选为checked当然,也可以拿出循环体来实现,只要能将上面的问题解决就好,想了两三个小时了,麻烦大家给个思路吧当然,数组也有可能为空,这个就不用判断了,很好解决,现在麻烦的是怎么将上面的问题解决,想了半天,没有头绪,头大了。

解决方案 »

  1.   


    foreach($arr as $key=>$v){
    if($key == $_check_id){
    //这儿是checked
    continue;
    }
    ......
      

  2.   

    $arr = array(
        0 => array('id'=>12,'name'=>'NO.1'),
        1 => array('id'=>13,'name'=>'NO.2'),
        2 => array('id'=>14,'name'=>'NO.3'),
        3 => array('id'=>15,'name'=>'NO.4'),
    );

    $_check_id = 14;
    $found = false;
    $htmls = array();
    if($arr) {
    foreach($arr as $v){
    $input_pre = <<<EOT
    <input type="radio" name="c" id="d_{$v['id']}" value="{$v['id']}"
    EOT;
    $input_post = <<<EOT
    />{$v['name']}
    EOT;
    if(!$found && $_check_id == $v['id']) {
    $found = true;
    $input_pre .= ' checked ';
    }
    $htmls[] = array($input_pre, $input_post);
    }
    }
    $htmlstr = '';
    foreach($htmls as $html) {
    if(!$found) {
    $html[0] .= ' checked ';
    $found = true;
    }
    $htmlstr .= implode('', $html);
    }
    echo $htmlstr;可直接执行。
      

  3.   

    <?php
    $arr = array(
        0 => array('id'=>12,'name'=>'NO.1'),
        1 => array('id'=>13,'name'=>'NO.2'),
        2 => array('id'=>14,'name'=>'NO.3'),
    );
     
    $_check_id = 0;
    if($arr) {
      foreach($arr as &$v) {
        if($_check_id == $v['id']) {
          $v['check'] = ' checked';
          $_check_id = -1;
        }
      }
      if($_check_id >=0) $arr[0]['check'] = ' checked';
      foreach($arr as $v){
    ?>
    <input type="radio" name="c" id="d_<?php echo $v['id']?>" value="<?php echo $v['id']?>" <?php ;echo isset($v['check'])?$v['check']:''?> /><?php echo $v['name']?>
    <?php 
    }
    }?>
      

  4.   

    因为引用,把  foreach($arr as &$v) {
        if($_check_id == $v['id']) {
          $v['check'] = ' checked';
          $_check_id = -1;
        }
      }
    改为  foreach($arr as &$vv) {
        if($_check_id == $vv['id']) {
          $vv['check'] = ' checked';
          $_check_id = -1;
        }
      }
    即可
      

  5.   

    另外你应该注意到一个事实
    radio 组只能有一个成员被选中,后激活的优先于先激活的
    所以只需<?php
    $arr = array(
        0 => array('id'=>12,'name'=>'NO.1'),
        1 => array('id'=>13,'name'=>'NO.2'),
        2 => array('id'=>14,'name'=>'NO.3'),
    );
      
    $_check_id = 13;
    if($arr) {
      foreach($arr as $i=>$v){
    ?>
    <input type="radio" name="c" id="d_<?php echo $v['id']?>" value="<?php echo $v['id']?>" <?php echo $i==0 || $_check_id == $v['id'] ? ' checked':''?> /><?php echo $v['name']?>
    <?php 
    }
    }?>即可。只需要遍历一次
      

  6.   


    楼主,昨天我也试了,遍历一扁,如果_check_id的值大于第一个id,第一个radio会被checked
      

  7.   

    那有什么关系呢?
    #8产生的html为
    <input type="radio" name="c" id="d_12" value="12"  checked />NO.1
    <input type="radio" name="c" id="d_13" value="13"  checked />NO.2
    <input type="radio" name="c" id="d_14" value="14"  />NO.3
    但实际效果是
      

  8.   


    其实还有好多的功能,我都没有加上,比如:给上class,记录选中的id,那肯定就会有问题了感谢回复~结贴ing