本帖最后由 junchen168168 于 2011-01-23 17:51:28 编辑

解决方案 »

  1.   

    $arrMails = array(
    array('mail'=>'[email protected]'),
    array('mail'=>'[email protected]')
    );
    把你这个数组变成
    $arrMailsHash = array('[email protected]' => 1, '[email protected]' => 1)这样的hash表方式(这个变换一个循环就够了).然后在你循环中就好判断了
    <input checked="<?php echo isset($arrMailsHash[$arrEmail['email']] ? 'true' : 'false' ?>" />
      

  2.   


    <?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;
    ?>
      

  3.   

    我感觉也是三楼直观。
    关键是学习了 in_array 函数的应用。
      

  4.   

    你运行过了代码吗?
    <?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;
    ?>
    这么写是可以但是要两个数组的长度相等!
      

  5.   

    数组是二维不能直接搜索,应该这样$arrEmails = array(
    array('id'=>1,'email'=>'[email protected]','name'=>'111','createtime'=>'2011-1-22 17:12:12'),
    array('id'=>2,'email'=>'[email protected]','name'=>'222','createtime'=>'2011-1-21 14:12:12'),
    array('id'=>2,'email'=>'[email protected]','name'=>'333','createtime'=>'2011-1-20 14:12:12'),
    array('id'=>2,'email'=>'[email protected]','name'=>'444','createtime'=>'2011-1-19 14:12:12')
    );
    $arrMails = array(
    array('mail'=>'[email protected]'),
    array('mail'=>'[email protected]')
    );
    $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;
      

  6.   

    我觉得单独开辟一个中间的数组作为hash表来做, 性能上要好一些的.嵌套循环时间开销毕竟是比较大的.楼上ihefe的解法, 如果$arrMails和$arrEmails中的第二维数组顺序不一致...结果也会不正确的.
      

  7.   

    也对。顺序也会改变,这样吧$arrEmails = array(
    array('id'=>1,'email'=>'[email protected]','name'=>'111','createtime'=>'2011-1-22 17:12:12'),
    array('id'=>2,'email'=>'[email protected]','name'=>'222','createtime'=>'2011-1-21 14:12:12'),
    array('id'=>2,'email'=>'[email protected]','name'=>'333','createtime'=>'2011-1-20 14:12:12'),
    array('id'=>2,'email'=>'[email protected]','name'=>'444','createtime'=>'2011-1-19 14:12:12')
    );
    $arrMails = array(
    array('mail'=>'[email protected]'),
    array('mail'=>'[email protected]')
    );
    $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;