Nu har jag testat lite, och fått ner tiden ganska radikalt med ovanstående koncept. Det är fortfarande aningen exponentiellt, men det går mycket snabbare;
http://pastebin.com/S4UvCCs4
Koden ovan är verkligen inte optimal eller snygg. Man kan skippa en eller flera av looparna om man vill. Den är också ganska stökig, men även det går att städa upp. Som koncept duger det tycker jag...
5000 users kan jag matcha till 2398 par på 480-500 ms. 1000 går på 35 ms.
Förslag på förbättringar här hade varit att istället för att loopa grupperingsarrayn, bara ta första användaren
PHP-kod:
$item = array_values($searchUsers)[0]
är han matchad (ta bort honom)
PHP-kod:
unset($searchUsers[$topKey][$item['UserID']]);
eller är han nuvarande userid, gå på nästa.
Anledningen till att $this->matched ligger kvar är för att den första initiala loopen i metoden match() kör det första subsettet av users, man skulle kunna bryta den loopen och börja om när man har fått en match, men jag tror det blir mindre effektivt faktiskt.
__________________
@Zn4rK -
Börja blogga -
Paintball i Göteborg
Det jag skriver är mina personliga åsikter och återspeglar inte vad WN eller andra företag jag representerar tycker.