0

私は私の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 i:1 i:2 i:3 を i: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; 私:11; 私:12;

この問題を解決しようとしましたが、成功しませんでした

$M=preg_replace('~i:~;~', '', $P);

a:18 by a:28を 変更しようとしています

$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 で要素の数を見つけて、この値を

4

3 に答える 3

1

PHP では、serializeJSON にシリアライズしません。JSON が必要な場合は、json_encode代わりに次を使用する必要があります。

$P = json_encode($concatenation);

編集:この正規表現はi:<digits>シリアル化されたデータからを削除しますが、これを削除するとunserialize、結果の文字列を取得できなくなることに注意してください。そのため、なぜそれを行う必要があるのか​​ わかりません。

$M = preg_replace('/([{;])i:\d+;/', '$1', $P);
于 2013-02-13T13:39:18.043 に答える
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);

1つおきのコンマをaに置き換えるだけで、=>設定が完了します

于 2013-02-13T15:29:38.573 に答える
0

serialize()関数はjson_encode とは異なり、変数名とその値を保存するために使用されます。後でuniversalize()を使用すると、すべてが利用可能になります。この目的のために、json_encode()json_decode( ) を使用します。

于 2013-02-13T13:40:10.893 に答える