php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #63736 array_key_exists extremely slow on referenced arrays
Submitted: 2012-12-10 13:39 UTC Modified: 2012-12-10 14:43 UTC
From: ymgve dot aa at gmail dot com Assigned:
Status: Not a bug Package: Performance problem
PHP Version: 5.4.9 OS: Windows
Private report: No CVE-ID: None
 [2012-12-10 13:39 UTC] ymgve dot aa at gmail dot com
Description:
------------
When you use array_key_exists() on a referenced array, it performs extremely slow compared to isset():

isset time 0.0053699016571045 size 0
isset time 0.0051219463348389 size 10
isset time 0.0032069683074951 size 100
isset time 0.0034000873565674 size 1000
isset time 0.0052909851074219 size 10000
array_key_exists time 0.0055620670318604 size 0
array_key_exists time 0.010941982269287 size 10
array_key_exists time 0.048230886459351 size 100
array_key_exists time 0.38906383514404 size 1000
array_key_exists time 5.6351599693298 size 10000

Due to the time increasing near linearly with the number of elements in the array, I assume the code for some reason looks through the array key linearly instead of using a hash lookup.

Test script:
---------------
http://pastebin.com/PVrf96an


Patches

Add a Patch

Pull Requests

Add a Pull Request

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2012-12-10 14:43 UTC] johannes@php.net
Thank you for taking the time to write to us, but this is not
a bug. Please double-check the documentation available at
http://www.php.net/manual/ and the instructions on how to report
a bug at http://bugs.php.net/how-to-report.php

References disable copy-on-write.
http://schlueters.de/blog/archives/125-Do-not-use-PHP-references.html has some details
 [2012-12-10 14:43 UTC] johannes@php.net
-Status: Open +Status: Not a bug
 
PHP Copyright © 2001-2020 The PHP Group
All rights reserved.
Last updated: Tue Jan 21 08:01:23 2020 UTC