程序逻辑有问题,请大虾帮忙

chinayuy 2012-11-05 10:25:55
<?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

当然,也可以拿出循环体来实现,只要能将上面的问题解决就好,想了两三个小时了,麻烦大家给个思路吧

当然,数组也有可能为空,这个就不用判断了,很好解决,现在麻烦的是怎么将上面的问题解决,想了半天,没有头绪,头大了。
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
chinayuy 2012-11-06
  • 打赏
  • 举报
回复
引用 10 楼 xuzuning 的回复:
那有什么关系呢? #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……
其实还有好多的功能,我都没有加上,比如:给上class,记录选中的id,那肯定就会有问题了 感谢回复~结贴ing
xuzuning 2012-11-06
  • 打赏
  • 举报
回复
那有什么关系呢?
#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
但实际效果是
chinayuy 2012-11-06
  • 打赏
  • 举报
回复
引用 8 楼 xuzuning 的回复:
另外你应该注意到一个事实 radio 组只能有一个成员被选中,后激活的优先于先激活的 所以只需PHP code123456789101112131415<?php$arr = array( 0 => array('id'=>12,'name'=>'NO.1'), 1 => array('id'=>13,'name'=>'NO.2'), 2 => ar……
楼主,昨天我也试了,遍历一扁,如果_check_id的值大于第一个id,第一个radio会被checked
xuzuning 2012-11-06
  • 打赏
  • 举报
回复
另外你应该注意到一个事实 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 
}
}?>
即可。只需要遍历一次
chinayuy 2012-11-06
  • 打赏
  • 举报
回复
引用 6 楼 xuzuning 的回复:
因为引用,把 foreach($arr as &$v) { if($_check_id == $v['id']) { $v['check'] = ' checked'; $_check_id = -1; } } 改为 foreach($arr as &$vv) { if($_check_……
请问版主,如果只循环一遍,能得到我想要的效果吗?
xuzuning 2012-11-06
  • 打赏
  • 举报
回复
因为引用,把
  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;
    }
  }
即可
chinayuy 2012-11-06
  • 打赏
  • 举报
回复
引用 3 楼 xuzuning 的回复:
PHP code12345678910111213141516171819202122<?php$arr = array( 0 => array('id'=>12,'name'=>'NO.1'), 1 => array('id'=>13,'name'=>'NO.2'), 2 => array('id'=>14,'name'=>'NO.3'),); $_……
您写的代码结果狠有意思,最后的两条纪录是相同的。。
chinayuy 2012-11-06
  • 打赏
  • 举报
回复
引用 2 楼 acabin 的回复:
PHP code123456789101112131415161718192021222324252627282930313233343536 $arr = array( 0 => array('id'=>12,'name'=>'NO.1'), 1 => array('id'=>13,'name'=>'NO.2'), 2 => array('id'……
你写的是对的,我昨天晚上也想到了,要循环两次,如果只循环一次,能得到结果吗?
xuzuning 2012-11-06
  • 打赏
  • 举报
回复
<?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 
}
}?>
acabin 2012-11-06
  • 打赏
  • 举报
回复


	$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;
可直接执行。
franzhong 2012-11-05
  • 打赏
  • 举报
回复

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

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧