Wyszukiwanie różnic w dwóch tablicach po ~100 000 elementów nie powinno trwać aż tak długo, żeby można było powiedzieć "póki co się mieli". Żeby przyspieszyć działanie takiego skryptu trzeba zastosować hashtablice (wyszukiwanie elementów w hashtablicy jest znacznie szybsze, niż porównywanie po kolei
n elementów zwykłej tablicy). Jako że w PHP tablice asocjacyjne mogą być traktowane jako hashtablice, to kod jest bardzo prosty. W praktyce sprowadza się do tego, co pokazali CuteOne i Sephirus, tyle że klucze tablic zamienione są z wartościami:
<pre>
<?php
// Wczytujemy drugą tablicę i zamieniamy jej format z:
// array (
// array( "nr" => 1234 ),
// array( "nr" => 2345 ),
// array( "nr" => 9876 ),
// ...
// );
//
// na:
// array (
// 1234 => 1,
// 2345 => 1,
// 9876 => 1,
// ...
// );
include "arr2.php";
foreach( $arr2 as $item )
{
$telArray[$item["nr"]] = 1;
}
// Wczytujemy pierwszą tablicę i sprawdzamy każdy jej
// numer telefonu z drugą tablicą. Jeśli NIE znajduje
// się w drugiej tablicy dodajemy taki numer do
// wynikowej tablicy $diffTelArray
include "arr1.php";
foreach( $arr1 as $item )
{
$tel1 = $item["Knt_Telefon1"];
$tel2 = $item["Knt_Telefon2"];
if( !empty( $tel1 ) && !isset( $telArray[$tel1] ) ) {
$diffTelArray[$tel1] = 1;
}
if( !empty( $tel2 ) && !isset( $telArray[$tel2] ) ) {
$diffTelArray[$tel2] = 1;
}
}
// Jako że wynikowa tablica również ma format:
// numer_telefonu => 1
// "poprawiamy" ją funkcją array_keys
echo "Peak memory: " . number_format( memory_get_peak_usage
() / 1024 / 1024, 2, ".", " " ) . " MB\n\n";
?>
</pre>
Wygenerowałem sobie tablice 1 i 2 zawierające odpowiednio 70 000 i 80 000 elementów (za telefony przyjąłem wartości losowe z zakresu 320000000 - 329999999) i powyższy kod wykonuje się u mnie w 0.75 sekundy i zajmuje w szczytowym momencie niecałe 80MB pamięci.
PS. Jeśli ma się to wykonywać raz, lub raz na tydzień jakoś w nocy, to faktycznie nie trzeba się przejmować wydajnością. W przeciwnym wypadku warto się nad tym zastanowić, bo wzrost wydajności jest znaczny.