Эффективный способ удаления нескольких элементов из массива PHP

У меня есть динамически сгенерированный массив имен файлов, скажем, он выглядит примерно так:

$files = array("a-file","b-file","meta-file-1", "meta-file-2", "z-file");

У меня есть пара конкретных имен файлов, которые я хочу исключить из массива:

$exclude_file_1 = "meta-file-1";
$exclude_file_2 = "meta-file-2";

Таким образом, я всегда буду знать значения элементов, которые я хочу отбросить, но не ключи.

Сейчас я рассматриваю несколько способов сделать это. Один способ, используя array_filter и пользовательскую функцию:

function excludefiles($v)
        {
        if ($v === $GLOBALS['exclude_file_1'] || $v === $GLOBALS['exclude_file_2'])
          {
          return false;
          }
        return true;
        }

$files = array_values(array_filter($files,"excludefiles"));

Другой способ, используя array_keys и unset:

$exclude_files_keys = array(array_search($exclude_file_1,$files),array_search($exclude_file_2,$files));
foreach ($exclude_files_keys as $exclude_files_key)
    {    
    unset($files[$exclude_files_key]);
    }
$files = array_values($page_file_paths);

Оба способа дают желаемый результат.

Мне просто интересно, какой из них будет более эффективным (и почему)?

Или, возможно, есть другой, более эффективный способ сделать это?

Как, может быть, есть способ иметь несколько значений поиска в функции array_search?

11
задан Community 23 May 2017 в 11:44
поделиться