Bug #80348 [Opn->Nab]: 10.000% inneficiency when using array_intersect_key and array_intersect_ukey

From: Date: Tue, 10 Nov 2020 15:57:16 +0000
Subject: Bug #80348 [Opn->Nab]: 10.000% inneficiency when using array_intersect_key and array_intersect_ukey
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-230253@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=80348&edit=1

 ID:                 80348
 Updated by:         danack@php.net
 Reported by:        gilperon at gmail dot com
 Summary:            10.000% inneficiency when using array_intersect_key
                     and array_intersect_ukey
-Status:             Open
+Status:             Not a bug
 Type:               Bug
 Package:            *General Issues
 Operating System:   All
 PHP Version:        7.4.12
 Block user comment: N
 Private report:     N

 New Comment:

"using 2 supposedly very similar functions"

They perform similar tasks, they don't behave the same internally. One of them needs to call
userland code from internal code. The other one doesn't.

Reporting non-existant performance bugs is not useful. It takes people time away from fixing actual
bugs, or analysing where performance problems are across the whole of the project. Please just get a
faster server, rather than expecting other people to magically make your particular use-case faster.


Previous Comments:
------------------------------------------------------------------------
[2020-11-10 15:00:48] gilperon at gmail dot com

Description:
------------
Please run the test script. In my computer it outputs this:

 1-> 0.0002131462097168
 2-> 0.02832914352417

It's a 10.000% difference (100 * 0.0002 / 0.02) when using 2 supposedly very similar functions,
with only a small difference that one allows a callback to be used.

I really need to use array_intersect_ukey but the performance hit is huge. I tried
creating my own PHP implementation of array_intersect_ukey and it runs a lot faster,
but still is much slower than array_intersect_key and I really need something similar
to array_intersect_key in terms of speed (it can even be 10x slower, but not 100x or
worse.

Test script:
---------------
<?php

$a = array();
$b = array();

for ($i=0;$i<1000;$i++) {

	$a[$i] = true;
	$b[2*$i + 1] = true;

}



$z = microtime(true);

for ($i=0;$i<10;$i++) {
	
	$temp = array_intersect_key($a,$b);
	
}

echo "\n 1-> " . (microtime(true) - $z);



$z = microtime(true);

for ($i=0;$i<10;$i++) {
	
	$temp = array_intersect_ukey($a,$b,function($key1,$key2) {
		
		if ($key1 === $key2) {

			return 0;
			
		}
		else{

			return $key2 - $key1;
		
		}
		
	});
	
}

echo "\n 2-> " . (microtime(true) - $z);

?>

Expected result:
----------------
Both functions should run at similar speeds.

Actual result:
--------------
One function runs 10.000% slower than the other.


------------------------------------------------------------------------



--
Edit this bug report at https://bugs.php.net/bug.php?id=80348&edit=1


Thread (7 messages)

« previous php.bugs (#230253) next »