Note that there are some explanatory texts on larger screens.

plurals
  1. PO
    text
    copied!<p>Depends on your priorities.</p> <p>If performance is your absolute driving characteristic, then by all means use the fastest one. Just make sure you have a full understanding of the differences before you make a choice</p> <ul> <li>Unlike <code>serialize()</code> you need to add extra parameter to keep UTF-8 characters untouched: <code>json_encode($array, JSON_UNESCAPED_UNICODE)</code> (otherwise it converts UTF-8 characters to Unicode escape sequences).</li> <li>JSON will have no memory of what the object's original class was (they are always restored as instances of stdClass).</li> <li>You can't leverage <code>__sleep()</code> and <code>__wakeup()</code> with JSON</li> <li>By default, only public properties are serialized with JSON. (in <code>PHP&gt;=5.4</code> you can implement <a href="http://php.net/manual/en/class.jsonserializable.php" rel="noreferrer">JsonSerializable</a> to change this behavior).</li> <li>JSON is more portable</li> </ul> <p>And there's probably a few other differences I can't think of at the moment.</p> <p>A simple speed test to compare the two</p> <pre><code>&lt;?php ini_set('display_errors', 1); error_reporting(E_ALL); // Make a big, honkin test array // You may need to adjust this depth to avoid memory limit errors $testArray = fillArray(0, 5); // Time json encoding $start = microtime(true); json_encode($testArray); $jsonTime = microtime(true) - $start; echo "JSON encoded in $jsonTime seconds\n"; // Time serialization $start = microtime(true); serialize($testArray); $serializeTime = microtime(true) - $start; echo "PHP serialized in $serializeTime seconds\n"; // Compare them if ($jsonTime &lt; $serializeTime) { printf("json_encode() was roughly %01.2f%% faster than serialize()\n", ($serializeTime / $jsonTime - 1) * 100); } else if ($serializeTime &lt; $jsonTime ) { printf("serialize() was roughly %01.2f%% faster than json_encode()\n", ($jsonTime / $serializeTime - 1) * 100); } else { echo "Impossible!\n"; } function fillArray( $depth, $max ) { static $seed; if (is_null($seed)) { $seed = array('a', 2, 'c', 4, 'e', 6, 'g', 8, 'i', 10); } if ($depth &lt; $max) { $node = array(); foreach ($seed as $key) { $node[$key] = fillArray($depth + 1, $max); } return $node; } return 'empty'; } </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload