2016-01-23 2 views
2

Есть ли «встроенный» оператор, который может сделать это:Есть ли встроенный оператор «ИЛИ» для массивов?

$class_map = array(
    'a' => 'long text', 
    'b' => 'long text', 
    'c' => 'long text', 
    'd' => 'other text', 
    'e' => 'different text' 
); 

Чтобы быть что-то вроде:

$class_map = array(
'a' OR `b` OR `c` => 'long text' 
'd' => 'other text', 
'e' => 'different text' 
); 

Я знаю о array_fill_keys(), но это на самом деле не является «инлайн» решение, я хочу чтобы видеть/редактировать все мои ключи и значения в пределах простого array.

+1

*** AFAIK ***, нет нет. – Script47

+1

Нет только этого ... "a, b, c" => – devpro

+0

@devpro эта форма не работает. – rockyraw

ответ

0

Нет, такого оператора, который относится к клавишам массива, нет. Тем не менее, могут быть другие способы добиться того, что вам может быть проще, просто воспользовавшись самой природой массивов в PHP.

Например ...

$class_map = [ 
    'a' => [ 
     'alias' => ['b','c',], 
     'value' => 'long text', 
    ], 
    'd' => 'other text', 
    'e' => 'different text', 
]; 

Теперь ваш массив может быть прочитан как это ...

foreach($class_map as $key => $value) { 
    if (is_array($value)) { 
     // has aliases... 
     foreach($value['alias'] as $v) { 
      // do stuff with aliases here 
     } 
    } else { 
     // has no aliases 
    } 
} 

Для целей поиска псевдонимов вы могли бы сделать что-то вдоль линий. ..

function searchClassMap($className, Array $class_map) 
{ 
    if (isset($class_map[$className])) { 
     // if the className already is a key return its value 
     return is_array($class_map[$className]) 
       ? $class_map[$className]['value'] 
       : $class_map[$className]; 
    } 
    // otherwise search the aliases... 
    foreach($class_map as $class => $data) { 
     if (!is_array($data) || !isset($data['alias'])) { 
      continue; 
     } 

     if (in_array($className, $data['alias'])) { 
      return $data['value']; 
     } 
    } 
}