On Tue, Oct 14, 2008 at 8:52 AM, Colin Guthrie <[EMAIL PROTECTED]> wrote:
> Yeti wrote:
>>
>> You might also want to try array_key_exists
>>
>> if (array_key_exists('loggedin', $_SESSION['userInfo'])) {
>> // do something with $_SESSION['userInfo']['loggedin']
>> }
>
> You'd first need to check that the key 'userInfo' existed in the $_SESSION
> array too.
>
> Personally, I very rarely see the point in using array_key_exists... It's a
> function call and has overhead where as isset() and empty() are language
> constructs and (I would hope) are much more efficient (although I've not
> done any benchmarks).
>

I've heard that a lot, but I just don't see it. I'm sure some of you
can come up with better tests than this, but here is what I used:

<?php

// Load some big arrays
$x = get_defined_functions();

$x = $x['internal'];

$x += get_defined_constants();


$iterations = 50000;


for ($i = 0, $start = microtime(true); $i < $iterations; ++$i) {
    isset($x[rand()]);
}
$elapsed = microtime(true) - $start;
$avg = $elapsed / $iterations;

echo "Completed $iterations iterations using isset() in $elapsed seconds.\n";
echo "Average time per function call: $avg\n\n";


for ($i = 0, $start = microtime(true); $i < $iterations; ++$i) {
    empty($x[rand()]);
}
$elapsed = microtime(true) - $start;
$avg = $elapsed / $iterations;

echo "Completed $iterations iterations using empty() in $elapsed seconds.\n";
echo "Average time per function call: $avg\n\n";



for ($i = 0, $start = microtime(true); $i < $iterations; ++$i) {
    array_key_exists(rand(), $x);
}
$elapsed = microtime(true) - $start;
$avg = $elapsed / $iterations;

echo "Completed $iterations iterations using array_key_exists() in
$elapsed seconds.\n";
echo "Average time per function call: $avg\n\n";


?>

Sample Results:
Completed 50000 iterations using isset() in 1.6928939819336 seconds.
Average time per function call: 3.3857879638672E-005

Completed 50000 iterations using empty() in 1.6825141906738 seconds.
Average time per function call: 3.3650283813477E-005

Completed 50000 iterations using array_key_exists() in 1.7125430107117 seconds.
Average time per function call: 3.4250860214233E-005

Based on these results, I'd hardly use the "language construct versus
function call" optimization argument to make my decision. I'm not sure
if this is a testament to improvements in the PHP engine over the last
couple years, or if equipment has gotten fast enough that the
differences have become irrelevant. Quite possibly, it's both.

Andrew

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to