Php 如何通过对另一个数组测试数组结果将复选框设置为选中状态?

Php 如何通过对另一个数组测试数组结果将复选框设置为选中状态?,php,mysql,arrays,loops,checkbox,Php,Mysql,Arrays,Loops,Checkbox,我想通过测试查询结果中的一个数组和查询结果中的另一个数组,将复选框显示为选中状态,但我似乎无法得到它 以下是我到目前为止的想法: 第一个问题: $getbficiaryres = mysqli_query($link, " SELECT a.`id`, b.`id` as `bfryid`, b.`bficiaryname`, c.`notes` as `bfrynotes` FROM `activity` a, `beneficiary` b, `bficia

我想通过测试查询结果中的一个数组和查询结果中的另一个数组,将复选框显示为选中状态,但我似乎无法得到它

以下是我到目前为止的想法:

第一个问题:

$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 
id  bficiaryname
1   aaa
2   xxx
3   bbb
4   yyy
第二个问题:

$bficiaryres = mysqli_query($link, "SELECT `id`, `bficiaryname` FROM `beneficiary`");
第二个查询结果:

id  bfryid  bficiaryname bfrynotes
1   2       xxx          xxx notes
1   4       yyy          yyy notes 
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++;
}
$i=0;
而($bficaryrow=mysqli\u fetch\u数组($bficaryres)){
如果($bficiaryrow['id']==$getbficiaryrow['bfryid']){
回声'
“.$getbficiaryrow['bfryname']”
“.$getbficiaryrow['bfrynotes']”
';
}否则{
回声'
“.$bficiaryrow['bficiaryname']”
';    
}                       
$i++;
}
我期望的结果是将两个复选框xxx(id no 2)和yyy(id no 4)设置为选中,但唯一选中的是xxx

如何正确循环以测试所有阵列

我希望我的问题足够清楚

我的头就要爆炸了。。。非常感谢您的帮助


谢谢。

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

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

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

foreach ($arr1 as $key => $val){
    if (in_array($val, $arr2)){
        echo("checked: ".$val."<br />");
    }
}
$arr1=数组(“xxx”、“yyy”);
$arr2=数组(“aaa”、“xxx”、“bbb”、“yyy”);
foreach($arr1作为$key=>$val){
if(在数组中($val,$arr2)){
回声(“选中:.$val.”
); } }
谢谢@mynawaz,尽管我在这之后仍在挣扎,但我真的很感谢你的帮助。我已经学习了更多关于数组的知识。对我来说还有很长的路要走。。。继续前进:D

大约一周后,我终于明白了,我需要的是另一个mysql查询,使用LEFT JOIN获得配对结果。这篇文章帮助我更好地理解它:


thx so

您需要两个循环,一个循环迭代第一个查询的结果,另一个循环在第一个循环中迭代第二个查询的结果query@mynawaz我已经尝试循环第二个查询和其中的第一个查询,但是如果我这样做,我只得到两个复选框。。。因为第一个查询结果只给出两行。我想要的是4个复选框,其中两个复选框(xxx和yyy)设置为选中,我该怎么做?谢谢。请确保对两个查询使用两个不同的连接,因为如果使用同一个连接执行两个查询,则内部查询将重置只执行一个查询的外部查询的链接标识符iteration@mynawaz我试着按照你的建议,但是现在结果显示了8个复选框,其中两个复选框xxx和yyy设置为选中状态,这越来越接近我要查找的内容,但是现在,我如何只迭代第二个查询的行数,第二个查询只有4个复选框?执行上述操作会给我4个复选框,所有复选框的第一个值(aaa)都设置为选中状态。我哪里做错了?T_T确保您使用了与我的示例相同的控制结构,您需要做的是使用两个单独的循环从查询结果创建arr1和arr2,然后使用foreach循环和if语句检查匹配值并仅显示匹配值的复选框(不匹配值不显示)。还请注意,in_数组区分大小写,即xxx不等于xxx,两个数组中的值必须大小写相同