0

これは私のコードです。

$data = array(
        '24 Jan|8:30' => '12.6',
        '22 Feb|8:30' => '250',
        '11 Mar|8:10' => '0',
        '31 Apr|23:30' => '7',
        '32 Apr|23:30' => '80',
        '33 Apr|23:30' => '67',
        '34 r|23:30' => '45',
        '35 Ap|23:30' => '66',
        '34 Lr|23:30' => '23',
        '3 Apr|23:30' => '23'
    );

    //echo serialize($data);
    $x = unserialize('a:10:{s:12:"24 Jan|8:30 ";s:4:"12.6";s:12:"22 Feb|8:30 ";s:3:"250";s:12:"11 Mar|8:10 ";s:1:"0";s:12:"31 Apr|23:30";s:1:"7";s:12:"32 Apr|23:30";s:2:"80";s:12:"33 Apr|23:30";s:2:"67";s:12:"34 r|23:30 ";s:2:"45";s:12:"35 Ap|23:30 ";s:2:"66";s:12:"34 Lr|23:30 ";s:2:"23";s:12:"3 Apr|23:30 ";s:2:"23";}');
    var_dump($x);

unserialize 関数では機能しません。助けてください!

4

3 に答える 3

4

$data のシリアル化された表現と、シリアル化を解除しようとしている文字列が異なります。

http://codepad.viper-7.com/3zlk1a

オフセット 199 で

s:12:"34 r|23:30 "

しかし、文字列 ( s) の長さは 12 文字ではありません(それがs:12:意味することです)。何かがシリアル化された文字列を直接変更したと思います。やらないでください:)常にシリアル化を解除し、構造化された値を操作してください。

于 2013-01-02T23:56:06.303 に答える
4
'a:10:{s:12:"24 Jan|8:30 ";s:4:"12.6";s:12:"22 Feb|8:30 ";s:3:"250";s:12:"11 Mar|8:10 ";s:1:"0";s:12:"31 Apr|23:30";s:1:"7";s:12:"32 Apr|23:30";s:2:"80";s:12:"33 Apr|23:30";s:2:"67";s:12:"34 r|23:30 ";s:2:"45";s:12:"35 Ap|23:30 ";s:2:"66";s:12:"34 Lr|23:30 ";s:2:"23";s:12:"3 Apr|23:30 ";s:2:"23";}'

...有効なシリアル化ではありません。具体的には、s:12:"34 r|23:30 ";セグメントは文字列34 r|23:30に 12 文字が含まれていることを示していますが、実際には含まれていません。

于 2013-01-02T23:56:45.910 に答える
-1
 $a = serialize($data);
 $x = unserialize($a);
于 2013-01-02T23:51:55.253 に答える