What are the pros and cons of using objects vs associative arrays for JSON results of a CURL request in PHP?
I have a PHP script that uses CURL to return a JSON result that looks
//Curl set up code
$result = curl_exec($ch);
//Error checking code
$json = json_decode($result, true);
//Code to process result.
Now with the json_decode
function, I could set it to return process the JSON into a PHP object or to an associative array.
What would the pros and cons of using an objects vs associative arrays for the output of the json_decode
function function?
1 answer
It's just depend on PHP version. Above PHP 7 PHP object is faster and slightly heavier than array. On PHP 5 and below array is faster and lighter.
My test code:
<?php
$jsonobj = '{"Peter":35,"Ben":37,"Joe":43}';
$t0 = microtime(true);
$arraysOf=array();
$inicio=memory_get_usage();
for ($i=0; $i<100000; $i++) {
$arraysOf[] = json_decode($jsonobj,true);
}
$fin=memory_get_usage();
$timeArray = microtime(true) - $t0;
$memArray = $fin-$inicio;
echo '<p>arrays: '.$timeArray."</p>";
echo '<p>memory: '.$memArray."</p>";
$t0 = microtime(true);
$arraysOf=array();
$inicio=memory_get_usage();
for ($i=0; $i<100000; $i++) {
$arraysOf[] = json_decode($jsonobj);
}
$fin=memory_get_usage();
$timeObject = microtime(true) - $t0;
$memObject = $fin-$inicio;
echo '<p>Object: '.$timeObject."</p>";
echo '<p>memory: '.$memObject."</p>";
$timeDiff = abs(round((1 - $timeArray / $timeObject) * 100));
$memDiff = abs(round((1 - $memObject / $memArray) * 100));
$speed = $timeArray>$timeObject?"Slower":"Faster";
$speed2 = $memObject>$memArray?"Lighter":"Heavier";
echo '<p>associative arrays is '.$timeDiff.'% '.$speed.' and '.$memDiff.'% '.$speed2.' than object</p>';
?>
I tested on php 5.4, 7.4 and 8. You can test and check the result on:
-
associative arrays is 25% Faster and 18% Lighter than object
-
associative arrays is 22% Slower and 10% Lighter than object
-
associative arrays is 14% Slower and 10% Lighter than object
4 comments
Ref. to "PHP 7 PHP object is faster and lighter than array", can you please provide a reference to at least one benchmark? It is nice to provide references, so that future readers are able to find more.
@Alexei , check my updated answer. Thanks.
Your answer begins with stating that "Above PHP 7 PHP object is faster and lighter than array". However, according to your test results, arrays are always lighter than object.
@elgonzo: updated, Sorry, I meant lighter than PHP 5, but still slightly heavier.
0 comments