php,in_array和serialize()没有按预期工作

时间:2013-06-11 02:51:15

标签: php arrays serialization

我有一个数据库中朋友的联系人列表,我想要做的是检索用户联系人,看看是否有其他用户ID,如果不是那么添加它然后把它放回去数据库中。

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

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

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

提前致谢

这是我的代码

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());
        }
}

2 个答案:

答案 0 :(得分:2)

变化:

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

为:

$temp = unserialize($contacts);

unserialize()返回数组,因此每次都会在其周围包含额外的数组。

答案 1 :(得分:2)

首先改变这个

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

$ temp = unserialize($ contacts);

并且不要在in_array中使用==或====进行检查,请尝试使用

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

OR

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

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