Чтобы не в памяти, можно на диск. Сохранить массив чисел в файл. Для компактности как бинарный файл, по 4 байта на число
pack() (если это 32-битные id ВКонтакте вы сравниваете. Facebook id — лонги). Отсортированным. Тот же ВК умеет отдавать список сортированным. Сохранить так же второй.
Открыть оба файла, считать
fread($fh, 4) из каждого по числу: число А, число Б.
А больше Б ? Читаем новый Б.
Б больше А ? Читаем новый А.
Равны? Ура, это число сохраняем в «пересечение». Читаем новый А и новый Б.
Закончился один из файлов — пересечений больше нет.