note 85988 added to function.serialize

From: 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

« previous php.notes (#144831) next »