paulenot
@paulenot
IT Issue

Как оптимизировать удаление элементов из массива по массиву исключений?

У меня есть один массив содержащий список файлов которые необходимо обрабатывать.
Второй массив содержит список файлов которые нельзя трогать скрипту.

Я написал таким образом:
function exclude($list, $exceptions){
		foreach ($list as $key => $file) {
			foreach ($exceptions as $exception) {
				if ($file == $exception){
					unset($list[$key]);
				}
			}
		}
		return $list;
	}

$list - список файлов
$exceptions - исключения

Проблема этого алгоритма в том, что большое количество файлов и исключений затормаживают процесс.
Хотелось бы какое нибудь инверсионное решение, что бы наложить один массив на другой и удалить совпадения в первом. Но гугление ничего не дало.
Как можно оптимизировать этот код?
  • Вопрос задан
  • 49 просмотров
Решения вопроса 1
hahenty
@hahenty
('•')
array_diff

Пусть будет
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@zombtron
Можно так:
function exclude($list, $exceptions){
    $flipped = array_flip($list);
    foreach ($exceptions as $exception) {
          unset($flipped [$key]);
    }
    $list= array_flip($flipped );
    return $list;
  }

Такой вариант намного быстрее будет. И памяти меньше жрет. Единственное, array_flip. Без понятия, насколько она продуктивна.
Если array_flip тоже много памяти и времени хавать будет, то можно циклом обратный массив сформировать или изначально сформировать/передать $list в виде " 'filename' => '' "
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы