关于两个数组循环判断的问题

junchen168168 2011-01-23 05:48:22
代码如下:
说明:当循环$arrEmails这个数组时,判断$arrEmails与$arrMails中是否具有相同的值,如果有就选中复选框,该怎么弄?
<?php
$arrEmails = array(
array('id'=>1,'email'=>'111@126.com','name'=>'111','createtime'=>'2011-1-22 17:12:12'),
array('id'=>2,'email'=>'222@foxmail.com','name'=>'222','createtime'=>'2011-1-21 14:12:12'),
array('id'=>2,'email'=>'333@foxmail.com','name'=>'333','createtime'=>'2011-1-20 14:12:12'),
array('id'=>2,'email'=>'4444@live.com','name'=>'444','createtime'=>'2011-1-19 14:12:12')
);
$arrMails = array(
array('mail'=>'111@126.com'),
array('mail'=>'222@foxmail.com')
);
foreach($arrEmails as $arrEmail):
?>
<input type="checkbox" name="email" id="email" value="<?php echo $arrEmail['email']?>" /><?php echo $arrEmail['name']?><br />
<?php
endforeach;
?>
...全文
174 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
junchen168168 2011-01-24
  • 打赏
  • 举报
回复
感谢1#和10#的大哥!
ihefe 2011-01-24
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 lgg201 的回复:]

我觉得单独开辟一个中间的数组作为hash表来做, 性能上要好一些的.

嵌套循环时间开销毕竟是比较大的.

楼上ihefe的解法, 如果$arrMails和$arrEmails中的第二维数组顺序不一致...结果也会不正确的.
[/Quote]
也对。顺序也会改变,这样吧

$arrEmails = array(
array('id'=>1,'email'=>'111@126.com','name'=>'111','createtime'=>'2011-1-22 17:12:12'),
array('id'=>2,'email'=>'222@foxmail.com','name'=>'222','createtime'=>'2011-1-21 14:12:12'),
array('id'=>2,'email'=>'333@foxmail.com','name'=>'333','createtime'=>'2011-1-20 14:12:12'),
array('id'=>2,'email'=>'4444@live.com','name'=>'444','createtime'=>'2011-1-19 14:12:12')
);
$arrMails = array(
array('mail'=>'111@126.com'),
array('mail'=>'222@foxmail.com')
);
$newArray=array();
foreach($arrMails as $value)
{
$newArray[]=$value["mail"];
}
foreach($arrEmails as $arrEmail):
?>
<input type="checkbox" name="email" id="email" value="<?php echo $r['email']?>"
<?php if(in_array($arrEmail['email'], $newArray)) echo 'checked';?>/><?php echo $arrEmail['name']?><br />
<?php
endforeach;
goosman 2011-01-24
  • 打赏
  • 举报
回复
我觉得单独开辟一个中间的数组作为hash表来做, 性能上要好一些的.

嵌套循环时间开销毕竟是比较大的.

楼上ihefe的解法, 如果$arrMails和$arrEmails中的第二维数组顺序不一致...结果也会不正确的.
ihefe 2011-01-24
  • 打赏
  • 举报
回复
数组是二维不能直接搜索,应该这样

$arrEmails = array(
array('id'=>1,'email'=>'111@126.com','name'=>'111','createtime'=>'2011-1-22 17:12:12'),
array('id'=>2,'email'=>'222@foxmail.com','name'=>'222','createtime'=>'2011-1-21 14:12:12'),
array('id'=>2,'email'=>'333@foxmail.com','name'=>'333','createtime'=>'2011-1-20 14:12:12'),
array('id'=>2,'email'=>'4444@live.com','name'=>'444','createtime'=>'2011-1-19 14:12:12')
);
$arrMails = array(
array('mail'=>'111@126.com'),
array('mail'=>'222@foxmail.com')
);
$i=-1;
foreach($arrEmails as $arrEmail):
$i++;
?>
<input type="checkbox" name="email" id="email" value="<?php echo $r['email']?>"
<?php if(is_array($arrMails[$i]))if(in_array($arrEmail['email'], $arrMails[$i])) echo 'checked';?>/><?php echo $arrEmail['name']?><br />
<?php
endforeach;
junchen168168 2011-01-23
  • 打赏
  • 举报
回复
你运行过了代码吗?
<?php
foreach($arrEmails as $k=> $r):
?>
<input type="checkbox" name="email" id="email" value="<?php echo $r['email']?>" <?php if (in_array($r['email'], $arrMails[$k])) echo "checked='checked'"; ?>/><?php echo $r['name']?><br />
<?php
endforeach;
?>
这么写是可以但是要两个数组的长度相等!
老骥伏枥 2011-01-23
  • 打赏
  • 举报
回复
我感觉也是三楼直观。
关键是学习了 in_array 函数的应用。
junchen168168 2011-01-23
  • 打赏
  • 举报
回复
3楼的代码我怎么运行了没有效果啊
转身 2011-01-23
  • 打赏
  • 举报
回复
3楼正解
tangjianft 2011-01-23
  • 打赏
  • 举报
回复

<?php
foreach($arrEmails as $r):
?>
<input type="checkbox" name="email" id="email" value="<?php echo $r['email']?>" <?php if (in_array($r['email'], $arrMails)) echo 'checked'?>/><?php echo $r['name']?><br />
<?php
endforeach;
?>


goosman 2011-01-23
  • 打赏
  • 举报
回复
$arrMails = array(
array('mail'=>'111@126.com'),
array('mail'=>'222@foxmail.com')
);
把你这个数组变成
$arrMailsHash = array('111@126.com' => 1, '222@foxmail.com' => 1)这样的hash表方式(这个变换一个循环就够了).

然后在你循环中就好判断了
<input checked="<?php echo isset($arrMailsHash[$arrEmail['email']] ? 'true' : 'false' ?>" />

21,887

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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