Сначала отсортируйте списки. Затем вы можете просмотреть оба списка с самого начала, сравнивая их по ходу.
Цикл будет выглядеть примерно так:
var A = getFirstArray().sort(), B = getSecondArray().sort();
var i = 0, j = 0;
while (i < A.length && j < B.length) {
if (A[i] === B[j]) {
doBla(A[i]);
i++; j++;
}
else if (A[i] < B[j]) {
i++;
}
else
j++;
}
(Это JavaScript; вы могли бы сделать это и на стороне сервера, но я не знаю PHP.)
Изменить & mdash; просто чтобы быть справедливым по отношению ко всем фанатам хэширования (которых я, конечно, уважаю), это довольно легко сделать в JavaScript:
var map = {};
for (var i = 0; i < B.length; ++i) map[B[i]] = true; // Assume integers.
for (var i = 0; i < A.length; ++i) if (map[A[i]]) doBla(A[i]);
Или, если числа являются или могут быть числами с плавающей точкой:
var map = {};
for (var i = 0; i < B.length; ++i) map['' + B[i]] = true; // Assume integers.
for (var i = 0; i < A.length; ++i) if (map['' + A[i]]) doBla(A[i]);
Поскольку числа довольно дешевы для хэширования (даже в JavaScript преобразование в строку до хэширования удивительно дешево), это будет довольно быстро.