Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
php、in_数组和serialize()未按预期工作_Php_Arrays_Serialization - Fatal编程技术网

php、in_数组和serialize()未按预期工作

php、in_数组和serialize()未按预期工作,php,arrays,serialization,Php,Arrays,Serialization,我在数据库中有一个朋友的联系人列表,我试图做的是检索一个用户联系人,查看其他用户id是否在其中,如果不在,则添加它,然后将其放回数据库 然而,我似乎一直在向数组中添加相同的联系人,即使它已经存在,并且输出像这样存储在我的数据库中 a:2:{i:0;a:1:{i:0;i:1070;}i:1;i:1070;} 这是in_数组在第一次检查时未计算为true的结果。每次函数运行时,都会添加越来越多的“层” 提前谢谢 这是我的密码 function addfarmertohunter($hunterid

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

然而,我似乎一直在向数组中添加相同的联系人,即使它已经存在,并且输出像这样存储在我的数据库中

a:2:{i:0;a:1:{i:0;i:1070;}i:1;i:1070;}
这是in_数组在第一次检查时未计算为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());
        }
}
更改:

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

unserialize()
返回数组,因此每次都在数组周围包装一个额外级别的数组。

更改:

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

unserialize()
返回数组,因此每次都要在其周围包装一个额外级别的数组。

首先更改此设置

$temp=数组(取消序列化($contacts))

$temp=取消序列化($contacts)

不要在数组中用==或===检查,像这样试试

a:2:{i:0;a:1:{i:0;i:1070;}i:1;i:1070;}
if(在数组中((int)$farmerid,$temp)){array_push($temp,$farmerid);}

如果(!in_数组((int)$farmerid,$temp)){array_push($temp,$farmerid);}

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

首先更改此值

$temp=数组(取消序列化($contacts))

$temp=取消序列化($contacts)

不要在数组中用==或===检查,像这样试试

a:2:{i:0;a:1:{i:0;i:1070;}i:1;i:1070;}
if(在数组中((int)$farmerid,$temp)){array_push($temp,$farmerid);}

如果(!in_数组((int)$farmerid,$temp)){array_push($temp,$farmerid);}


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

为什么要这样存储?为什么不让每个联系人都排成一行呢?@Barmar和cols Farmerid一样。亨特里德,第1排,第2排,第2排,第1排,第14排?这会更有效吗?是的,这是最好的方法。查找“关系表”和“多对多”。可能这样会更好,我感觉我目前的方法反映了我已经写了6周的php,谢谢你的评论,他们真的很有帮助。这不是php的问题,这是数据库设计。在研究数据库时,您是否了解了“规范化”(您是否“了解”了这些东西,或者您只是在学习过程中学习了这些东西)?为什么要这样存储?为什么不让每个联系人都排成一行呢?@Barmar和cols Farmerid一样。亨特里德,第1排,第2排,第2排,第1排,第14排?这会更有效吗?是的,这是最好的方法。查找“关系表”和“多对多”。可能这样会更好,我感觉我目前的方法反映了我已经写了6周的php,谢谢你的评论,他们真的很有帮助。这不是php的问题,这是数据库设计。在研究数据库时,您是否了解了“规范化”(您是否“了解”了这些东西,或者您只是在学习过程中学习了这些东西)?感谢您修复了它感谢您修复了它感谢您修复了它