php、in_数组和serialize()未按预期工作
我在数据库中有一个朋友的联系人列表,我试图做的是检索一个用户联系人,查看其他用户id是否在其中,如果不在,则添加它,然后将其放回数据库 然而,我似乎一直在向数组中添加相同的联系人,即使它已经存在,并且输出像这样存储在我的数据库中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
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的问题,这是数据库设计。在研究数据库时,您是否了解了“规范化”(您是否“了解”了这些东西,或者您只是在学习过程中学习了这些东西)?感谢您修复了它感谢您修复了它感谢您修复了它