note 85988 added to function.serialize
| From: | (chieftlatuadotfm) | Date: | Sat, 27 Sep 2008 09:32:04 +0000 |
| Subject: | note 85988 added to function.serialize | ||
| Groups: | php.notes | ||
| Request: | Send a blank email to php-notes+get-144831@lists.php.net to get a copy of this message | ||
I think serialized data must be compact. But serialize() function saves float values in bulky
format. It possible to squeeze float values, using preg_replace():
<?php
$val = 3.14159;
var_dump($val); // initial value: float(3.14159)
$val = serialize($val);
var_dump($val); // standart float format: string(55)
"d:3.14158999999999988261834005243144929409027099609375;"
$val = preg_replace('/d:([0-9]+(\.[0-9]+)?([Ee][+-]?[0-9]+)?);/e',
"'d:'.((float)$1).';'", $val);
var_dump($val); // compact float format: string(10) "d:3.14159;"
$val = unserialize($val);
var_dump($val); // unserialization successed: float(3.14159)
?>
In result becomes slowly serilization, but faster unserialization and less disk space.
WARNING! Some values can be rounded off
<?php
$val = 1/3;
var_dump($val); // initial value: float(0.333333333333)
$val = serialize($val);
var_dump($val); // standart float format: string(55)
"d:0.333333333333333303727386009995825588703155517578125;"
$val = preg_replace('/d:([0-9]+(\.[0-9]+)?([Ee][+-]?[0-9]+)?);/e',
"'d:'.((float)$1).';'", $val);
var_dump($val); // compact float format: string(10) "d:0.333333333333;"
$val = unserialize($val);
var_dump($val); // unserialization successed: float(0.333333333333)
$val = serialize($val);
var_dump($val); // but value is rounded off!: string(55)
"d:0.3333333333330000147753935380023904144763946533203125;"
?>
WARNING! Do not use for recursive serializations (serialize(serialize(...)))!
Sorry for my poor English.
----
Server IP: 91.196.196.241
Probable Submitter: 194.126.180.10
----
Manual Page -- http://www.php.net/manual/en/function.serialize.php
Edit -- https://master.php.net/note/edit/85988
Del: integrated -- https://master.php.net/note/delete/85988/integrated
Del: useless -- https://master.php.net/note/delete/85988/useless
Del: bad code -- https://master.php.net/note/delete/85988/bad+code
Del: spam -- https://master.php.net/note/delete/85988/spam
Del: non-english -- https://master.php.net/note/delete/85988/non-english
Del: in docs -- https://master.php.net/note/delete/85988/in+docs
Del: other reasons-- https://master.php.net/note/delete/85988
Reject -- https://master.php.net/note/reject/85988
Search -- https://master.php.net/manage/user-notes.php