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

У меня есть следующий массив:

Array
(
    [0] => BCD
    [1] => ACE
    [2] => AHP
    [3] => BGH
    [4] => ART
    [5] => COT
    [6] => ARG
    [7] => BGT
)

Мне нужно сопоставить все элементы, первая буква которых находится в следующем массиве:

Array
(
    [0] => B
    [1] => A
)

получить:

Array
(
    [0] => ACE
    [1] => AHP
    [2] => BGH
    [3] => ART
    [4] => ARG
    [5] => BGT
)

Если не считать цикла по всему массиву, как мне это сделать в PHP? Есть ли для этого встроенная функция массива PHP или их комбинация? Порядок не имеет значения как для ключей, так и для значений результирующего массива. Спасибо большое.


person Ana Ban    schedule 15.06.2012    source источник


Ответы (1)


Вы можете использовать array_filter для следующих операций:

$array = array('CBD', 'NHN', 'NHP', 'WHC', 'NND', 'CQN', 'WST', 'WVT');

$whitelist = array('W', 'N');

$filtered = array_filter($array, function($val) use ($whitelist) {
  // check if first letter is in the whitelist array
  if (in_array($val{0}, $whitelist)) {
    return $val;
  }
  return false;
});

Выход:

Array
(
    [1] => NHN
    [2] => NHP
    [3] => WHC
    [4] => NND
    [6] => WST
    [7] => WVT
)
person dan-lee    schedule 15.06.2012
comment
я смог сделать эту работу только тогда, когда я вынул use ($whitelist).. хм.. есть идеи, почему? - person Ana Ban; 15.06.2012
comment
Хм, я не могу выполнить его без ключевого слова use. У меня PHP 5.3.5, возможно, они изменили область видимости на глобальные переменные в более поздних версиях. - person dan-lee; 15.06.2012