<?php
function compareA($a, $b) {
return strcmp(json_encode($a), json_encode($b));
}
function compareB($a, $b) {
return strcmp(implode(',', $a), implode(',', $b));
}
function array_diff_multi($a, $b) {
return array_map('json_decode', array_diff(array_map('json_encode', $a), array_map('json_encode', $b)));
}
function bench_diff($a, $b, $callback) {
for ($i = 0; $i < 1000; $i++) {
$c = array_udiff($a, $b, $callback);
}
$start = microtime(true);
for ($i = 0; $i < 1000; $i++) {
$c = array_udiff($a, $b, $callback);
}
$end = microtime(true);
echo $callback, "\t", ($end - $start) * 1000, ' ms', PHP_EOL;
return $c;
}
$a = array(
array('localhost', 11211, 0),
array('localhost', 11211, 0),
array('localhost', 11212, 0),
array('localhost', 11213, 0),
array('localhost', 11214, 0),
array('localhost', 11214, 0),
array('localhost', 11214, 0),
array('localhost', 11212, 0),
array('other', 11211, 0),
array('localhost', 11211, 0),
);
$b = array(
array('localhost', 11211, 0),
array('other', 11211, 0),
array('other', 11212, 0),
array('localhost', 11212, 0),
array('localhost', 11212, 0),
array('localhost', 11213, 0),
);
$c = bench_diff($a, $b, 'compareA');
$c = bench_diff($a, $b, 'compareB');
for ($i = 0; $i < 1000; $i++) {
$c = array_diff_multi($a, $b);
}
$start = microtime(true);
for ($i = 0; $i < 1000; $i++) {
$c = array_diff_multi($a, $b);
}
$end = microtime(true);
echo "diff-json\t", ($end - $start) * 1000, ' ms', PHP_EOL;
var_export($c);
preferences:
33.44 ms | 402 KiB | 5 Q