如何在PHP中比较两个数组

4
while($row = $update_post->fetch_array()){
                        //Explodes checkbox values
                        $res = $row['column_name'];
                        $field = explode(",", $res);

                        $arr = array('r1','r2,'r3','r4','r5','r6');

                            if (in_array($arr, $field)) {
                                echo "<script>alert('something to do')</script>";
                            }else{
                                echo "<script>alert('something to do')</script>";
                            }
    }

如何检查$arr的值是否等于$field的值。

提前感谢您。


1
你需要使用 array_intersectin_array 在这里不起作用。 - devpro
请在聊天中检查响应。 - devpro
2个回答

4
如果您想匹配两个数组,则需要使用array_intersect()
如果您想使用in_array()检查特定值,则需要在此处使用循环。
<?php
$res = $row['column_name'];
$field = explode(",", $res);
$arr = array('r1','r2','r3','r4','r5','r6');
foreach ($arr as $value) {
    if(in_array($value, $field))   {
        echo "success";
    }
    else{
        echo "failed";   
    }
}    
?>

根据手册:in_array — 检查数组中是否存在某个值

还要注意,您的数组存在语法错误:

$arr = array('r1','r2,'r3','r4','r5','r6'); // missing quote here for r2

更新:

如果你想使用 array_intersect(),那么你可以像这样检查:

<?php
$arr1 = array('r1','r2');
$arr2 = array('r1','r2','r3','r4','r5','r6');
$result = !empty(array_intersect($arr1, $arr2));
if($result){
    echo "true";
}
else{
    echo "false";
}
?>

演示

更新2:

如果您想要检查使用array_intersect()获得的值,则可以像这样使用:

<?php
$arr1 = array('r2');
$arr2 = array('r1','r2','r3','r4','r5','r6');
$result = array_intersect($arr1, $arr2);
if(count($result)){
    echo "Following ID(s) found: ".implode(",",$result);
}
?>

DEMO


如果$field的值仅为'r1','r2','r3',那么array_intersect会返回true吗? - oo7
@oo7:没有array_intersect,只返回匹配的数组。 - devpro
假设$field = r2,r3。那么我如何确定r2,r3是$arr的位置? - oo7
请查看更新2 @oo7。 - devpro
它可以工作。但是我有6个复选框。如果$field返回r2、r3,则我希望自动选中r2、r3复选框。我的复选框是由循环生成的。 - oo7
显示剩余4条评论

1

使用array_intersect比较两个数组,返回匹配的值,然后使用count检查匹配的数组值有多少个...

array_intersect

比较两个数组的值,并返回匹配的值:

while($row = $update_post->fetch_array()){
    //Explodes checkbox values
    $res = $row['column_name'];
    $field = explode(",", $res);

    $arr = array('r1','r2','r3','r4','r5','r6');

        if (count(array_intersect($arr, $field)) > 0) {
            echo "<script>alert('duplicate array')</script>";
        }else{
            echo "<script>alert('something to do')</script>";
        }

}


如果$field返回了一个值r2,然后比较$arr是否有一个值r2。如果是这样,返回true。我该怎么做呢? - oo7
它不是返回 true,而是返回匹配数组。假设 $field 的值为 r2,则与 $arr 中的值进行比较,如果有匹配项,则返回该匹配数组!因此,计算返回的数组是否大于 0,如果是,则表示有匹配数组。 - Jack jdeoel
在这种情况下,我们能否识别匹配项在 $arr 中的索引位置? - oo7

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接