我的php脚本中有这段代码
$concatenation= array('idcarde',$idcarde ,'mobile' ,$mobile ,'firstname',$firstname ,'lastname',$lastname ,'jour',$jour ,'mois',$mois ,'annee',$annee ,'adress',$adresse ,'Governora',$Governora);
$P = serialize( $concatenation );
$mabase = mysql_connect("localhost", "root", "root");
if ($mabase) {
mysql_select_db("mb", $mabase);
}
// insere toutes les donness provenant de $_POST
$sql = " INSERT INTO `test` SET
`formid` = '" . $formid . "',
`data` = '" . mysql_escape_string($P) . "',
`creation_date` = '" . date("Y-m-d H:i:s"). "' ";
@mysql_query($sql, $mabase);
此代码将数据保存在我的表测试
中在数据栏中,我得到了以下结果:
a:18:{i:0;s:7:"idcarde";i:1;s:8:"00688009";i:2;s:6:"mobile";i:3;s:8:"52199200";i:4;s:9:"firstname";i:5;s:6:"dumas";i:6;s:8:"lastname";i:7;s:6:"alen";i:8;s:4:"jour";i:9;s:2:"05";i:10;s:4:"mois";i:11;s:2:"05";i:12;s:5:"annee";i:13;s:4:"1951";i:14;s:6:"adress";i:15;s:54:"11 rue paris";i:16;s:9:"Governora";i:17;s:5:"france";}
我想知道如何消除这个值i:0 i:1 i:2 i:3 ...
我也尝试使用此代码:
它以这种格式保存数据:
["idtype","CIN","mobile","20390112","idcard","00731429","firstname","samia","lastname","Mejri","email","","gender","M.","deliv_lieu","","deliv_d","","deliv_m","","deliv_y","","birthdate_d","08","birthdate_m","10","birthdate_y","1944","address","36 rue Grece ","city","France","gouv","France","profession","","field","","bank","","agency","","friends","","followers","","blog_url","","website","","civil_status","","nickname","","zipcode",""]
但是使用之前的代码,它会显示如下
a:18:{i:0;s:7:"idcarde";i:1;s:8:"00688009";i:2;s:6:"mobile";i:3;s:8:"52199200";i:4;s:9:"firstname";i:5;s:6:"dumas";i:6;s:8:"lastname";i:7;s:6:"alen";i:8;s:4:"jour";i:9;s:2:"05";i:10;s:4:"mois";i:11;s:2:"05";i:12;s:5:"annee";i:13;s:4:"1951";i:14;s:6:"adress";i:15;s:54:"11 rue paris";i:16;s:9:"Governora";i:17;s:5:"france";}
这是我想要的但是我想要消除i:0我:1我:2我:3直到我:17
我现在尝试使用此代码:
$concatenation= array('idcarde',$idcarde ,'mobile' ,$mobile ,'firstname',$firstname ,'lastname',$lastname ,'jour',$jour ,'mois',$mois ,'annee',$annee ,'adress',$adresse ,'Governora',$Governora);
$P = serialize( $concatenation );
$M=preg_replace('~i:[0-9];~', '', $P);
$mabase = mysql_connect("localhost", "root", "root");
if ($mabase) {
mysql_select_db("mb", $mabase);
}
// insere toutes les donness provenant de $_POST
$sql = " INSERT INTO `test` SET
`formid` = '" . $formid . "',
`data` = '" . mysql_escape_string($M) . "',
`creation_date` = '" . date("Y-m-d H:i:s"). "' ";
@mysql_query($sql, $mabase);
此代码从数据 i:1中消除; i:2; 直到 i:9; ,但无法消除
例如 i:10; I:11; I:12;
我尝试解决此问题但没有成功
$ M = preg_replace('~i:〜;〜','',$ P);
我尝试用 a:28 改变 a:18
$P = serialize($concatenation) ;
//$M=preg_replace('~i:[0-9];~', '', $P);
$M=preg_replace('~i:[0-9]+;~', '', $P);
$M1=preg_replace('a:[0-9]+~', 'a:28', $M);
但显示错误
我使用$M1=preg_replace('~a:[0-9]+~', 'a:28', $M);
但我想说28是$ P中元素的数量
所以我应该在$ P中找到元素的数量,然后在
中创建这个值答案 0 :(得分:1)
在PHP中,serialize
未序列化为JSON。如果你想要JSON,你应该使用json_encode
代替:
$P = json_encode($concatenation);
修改:此正则表达式将从序列化数据中删除i:<digits>
,但请注意,一旦删除此内容,您就不能再unserialize
生成的字符串了,所以我不确定你为什么要这样做:
$M = preg_replace('/([{;])i:\d+;/', '$1', $P);
答案 1 :(得分:0)
serialize()函数与json_encode不同,它用于保存带有值的变量名,后来你可以universalize()然后一切都可用。为此,请使用json_encode()和json_decode()。
答案 2 :(得分:0)
所以,a:number
表示你有一个数组和里面元素的数量。所有i:number;
都是数组的键。它们一直到你拥有的元素数量为1(因为它从0开始)
如果删除密钥,它将反序列化,如
['idcarde'] => '00688009'
['mobile'] => '5265656'
如果这是你想要的,那么在第一行
$concatenation= array('idcarde',$idcarde ,'mobile' ,$mobile ,'firstname',$firstname ,'lastname',$lastname ,'jour',$jour ,'mois',$mois ,'annee',$annee ,'adress',$adresse ,'Governora',$Governora);
只需用=>
替换所有其他逗号,然后设置