Gå til innhold

Effektivisere array sammenligning og merging


Anbefalte innlegg

Hei

 

Jeg har flere en-dim arrayer på ca 500 items hver. Hver av array'ene kan inneholde en del like verdier, så jeg trenger å sammenligne dem, og de verdiene som ikke ligger i begge merger jeg til total-arrayet. Dette gjør jeg x antall ganger i et forsøk på å samle flest mulig unike brukere.

 

Prosesseringen er litt tung og jeg lurer på om det er en mer lur måte å gjøre det samme på. Under er koden jeg benytter

 

$TotalMembers  = GetOneDimArrMembersName($members2);

   for($i=0; $i< 3; $i++)
   {
     $compare2 = GetOneDimArrMembersName($compare2);


     $difference = array_diff($compare2, $TotalMembers);

     $TotalMembers = array_merge($difference, $TotalMembers);
   }

Lenke til kommentar
Videoannonse
Annonse
  • 2 måneder senere...

array_diff tar flere enn to argumenter. Dersom antall arrays du skal sammenlikne varierer, så tipper jeg du kan bruke call_user_func_array med relativt fin hastighet i forhold til det du har nå.

Takk for svar. Hvis jeg forstod riktig så implementerte jeg følgende:

$args[0] = $CompareMembers; $args[1] = $TotalCompareMembers;
$difference = call_user_func_array('array_diff', $args);

Dette tok lengre tid enn å kalle array_diff på vanlig vis.

Snittiden til array_diff: 0,00144838

Snittiden ved å bruke call_user_func_array: 0,009550989

Kjørte da 12 gjennomkjøringer

 

Edit:

Testen jeg gjorde var ikke bra nok. Nye tider på 20 gjennomkjøringer:

Snittiden til array_diff: 0,016426881

Snittiden ved å bruke call_user_func_array: 0,017324924

Men fremdeles raskere med vanlig array_diff.

Endret av martin82
Lenke til kommentar

Nå har jeg riktig nok kommet relativt beduggen hjem, men jeg tror jeg ser en vesentlig feil i koden din. Funksjonen call_user_func_array er noe man vanligvis bare bruker dersom man har et dynamisk antall argumenter til en funksjon. Du sender konstant to argumenter, ergo er det fullstendig bortkastet å i det hele tatt tenke på call_user_func_array.

 

Anbefaler deg å titte litt på dokumentasjonen, og spesielt eventuelle eksempler.

 

(Skal samtidig nevnes at når jeg selv leser dokumentasjonen, så virker det ikke helt som array_diff egentlig gjør det man skulle forvente i henhold til normal og standard setteori. Hvorvidt det stemmer eller ikke får være opp til noen andre å teste, fordi jeg gidder virkelig ikkewpjejgi nå.)

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...