0

我在数据库中有一个朋友的联系人列表,我想做的是检索用户联系人,查看其他用户 ID 是否在其中,如果没有,则添加它,然后将其放回数据库中。

但是我似乎继续将相同的联系人添加到数组中,即使它已经存在并且输出存储在我的数据库中,就像这样

a:2:{i:0;a:1:{i:0;i:1070;}i:1;i:1070;}

这是 in_array 在第一次检查时未评估为真的产物。每次运行该功能时,都会添加越来越多的“层”。

提前致谢

这是我的代码

function addfarmertohunter($hunterid,$farmerid){
    $select="SELECT contacts from users where id=$hunterid";
    $result=mysql_query($select)or die(' add farmer error'. mysql_error());
        if (mysql_num_rows($result)==1){
        $row=mysql_fetch_array($result);
        $contacts=$row[0];  
        if($contacts==null||$contacts=="N;"||$contacts==""){
            $temp=array();
                        array_push($temp, $farmerid);
        }else{
            $temp=array(unserialize($contacts));
            if(in_array((int)$farmerid, $temp)==FALSE){array_push($temp, $farmerid);}
        }
        $strcontacts=serialize($temp);
        $ins="UPDATE users set contacts='$strcontacts' where id=$hunterid";
        mysql_query($ins) or die('add farmer e'.mysql_error());
        }
}
4

2 回答 2

2

改变:

$temp = array(unserialize($contacts));

至:

$temp = unserialize($contacts);

unserialize()返回数组,因此您每次都在其周围包裹一层额外的数组。

于 2013-06-11T02:55:54.793 回答
2

先改这个

$temp = 数组(反序列化($contacts));

$temp = unserialize($contacts);

并且不要在 in_array 中检查 == 或 ==== 尝试这样

if(in_array((int)$farmerid, $temp)){array_push($temp, $farmerid);}

或者

if(!in_array((int)$farmerid, $temp)){array_push($temp, $farmerid);}

因为如果在数组中找到 needle 则返回 TRUE,否则返回 FALSE。

于 2013-06-11T03:02:48.440 回答