【问题标题】:How to set checkbox as checked by testing array result against another array?如何通过针对另一个数组测试数组结果来将复选框设置为选中?
【发布时间】:2015-11-20 05:17:08
【问题描述】:

我想通过从查询结果中测试一个数组并从查询结果中测试另一个数组来显示复选框,但我似乎无法得到它......

这是我到目前为止的想法:

第一个查询:

$getbficiaryres = mysqli_query($link, "
SELECT
    a.`id`,
    b.`id` as `bfryid`, b.`bficiaryname`,
    c.`notes` as `bfrynotes`
FROM 
    `activity` a, `beneficiary` b, `bficiarynotes` c, `actbficiary_link` d 
WHERE
    a.`id` = c.`activity_id` AND
    a.`id` = d.`activity_id` AND
    b.`id` = c.`beneficiary_id` AND
    b.`id` = d.`beneficiary_id` AND
    a.`id` = '".$edit."'");

$getbficiaryrow = mysqli_fetch_array($getbficiaryres);

第一个查询结果:

id  bfryid  bficiaryname bfrynotes
1   2       xxx          xxx notes
1   4       yyy          yyy notes 

第二次查询:

$bficiaryres = mysqli_query($link, "SELECT `id`, `bficiaryname` FROM `beneficiary`");

第二个查询结果:

id  bficiaryname
1   aaa
2   xxx
3   bbb
4   yyy

php代码:

$i = 0;
while($bficiaryrow = mysqli_fetch_array($bficiaryres)){
    if($bficiaryrow['id'] == $getbficiaryrow['bfryid']){    
        echo '
        <div class="form-group">
            <div class="col-sm-12">
                <div class="checkbox">
                    <label for="checkbox"><input type="checkbox" name="pmanfaat['.$i.']" value="'.$getbficiaryrow['bfryid'].'" checked />'.$getbficiaryrow['bfryname'].'
                    </label>
                </div><textarea name="ketpmanfaat['.$i.']" class="form-control">'.$getbficiaryrow['bfrynotes'].'</textarea>
            </div>
        </div>';

    }else{
        echo '
        <div class="form-group">
            <div class="col-sm-12">
                <div class="checkbox">
                    <label for="checkbox"><input type="checkbox" name="pmanfaat['.$i.']" value="'.$bficiaryrow['id'].'" />'.$bficiaryrow['bficiaryname'].'
                    </label>
                </div><textarea name="ketpmanfaat['.$i.']" class="form-control"></textarea>
            </div>
        </div>';    
    }                       
    $i++;
}

我期望的结果是将两个复选框 xxx (id no 2) 和 yyy (id no 4) 设置为选中,但唯一选中的是 xxx。

如何正确循环以测试所有数组?

我希望我的问题足够清楚。

我的头'快要爆炸了......任何帮助都非常感谢。

谢谢。

【问题讨论】:

  • 您需要两个循环,一个用于迭代第一个查询的结果,另一个循环在第一个循环中迭代第二个查询的结果
  • @mynawaz 我尝试在其中循环第二个查询和第一个查询,但如果我这样做,我只有两个复选框......因为第一个查询结果只给出两行。我想要的是 4 个复选框,其中两个复选框(xxx 和 yyy)设置为已选中,我该怎么做?谢谢。
  • 一定要为两个查询使用两个不同的连接,因为如果你使用相同的连接来执行两个查询,内部查询将重置外部查询的链接标识符,它将只执行一次迭代
  • @mynawaz 我已经尝试按照您的建议放置,但现在结果显示 8 个复选框,其中两个复选框 xxx 和 yyy 设置为已选中,它越来越接近我正在寻找的内容,但是现在,如何只迭代与第二个查询一样多的行,即只有 4 个复选框?

标签: php mysql arrays loops checkbox


【解决方案1】:

比我的评论更好的方法是用您的数据填充两个数组,然后按照下面给出的代码行进行操作。

假设您构建了两个数组,如示例中所示。然后遍历第一个数组并搜索第二个数组中的值。如果找到匹配项,则显示选中的复选框,否则不执行任何操作

$arr1 = array("xxx", "yyy");
$arr2 = array("aaa", "xxx", "bbb", "yyy");

foreach ($arr1 as $key => $val){
    if (in_array($val, $arr2)){
        echo("checked: ".$val."<br />");
    }
}

【讨论】:

  • 执行上述操作给了我 4 个复选框,所有复选框都带有第一个值 (aaa),并且都设置为已选中。我哪里做错了? T_T
  • 确保您使用了与我的示例相同的控制结构,您需要做的是使用两个单独的循环从查询结果创建 arr1 和 arr2,然后使用 foreach 循环和 if 语句检查匹配值并仅显示匹配值的选中复选框(不匹配值不显示)。另请注意,in_array 区分大小写,即 xxx 不等于 Xxx,并且两个数组中的值必须大小写相同
【解决方案2】:

谢谢@mynawaz,虽然在那之后我还在苦苦挣扎,但我真的很感谢你的帮助。我已经了解了有关数组的更多信息。对我来说还有很长的路要走......继续前进:D

过了一周左右,我终于明白了,我需要的是另一个 mysql 查询来使用 LEFT JOIN 获得配对结果。这篇文章帮助我更好地理解它:answers from one of stackoverflow

谢谢

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-04-17
    • 1970-01-01
    • 1970-01-01
    • 2014-09-20
    • 2013-04-03
    • 2023-01-03
    • 2019-07-21
    • 1970-01-01
    相关资源
    最近更新 更多