2015-08-12 4 views
1

У меня есть массив, который выглядит это:Анализировать после последнего символа и до другого персонажа

array(7) [ 
    0 => "account_bad_rooms_view-1" (24) 
    1 => "account_view-2" (14) 
    2 => "admin_collector_view-5" (22) 
    3 => "admin_collector_edit-5" (22) 
    4 => "machine_service_item_edit-57" (28) 
    5 => "money_view-58" (13) 
    6 => "mu_edit-61" (10) 
] 

И мне нужно получить подстроку, которая будет содержать только "edit" или "view" поэтому мне нужно разобрать эту строку после последнего подчеркивания и перед тире. До сих пор у меня есть это:

foreach ($permissionsArray as $selectId => $permissions) { 

    preg_match('~_(.*?)-~', $permissions, $output); 
    dump($output[1]); 

} 

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

"bad_rooms_view" 
"view" 
"collector_view" 
"collector_edit" 
"service_item_edit" 
"view" 
"edit" 

, как я могу сделать это с легким способом?

ответ

1
_([^_]*)- 

Вы можете использовать это вместо этого. Это не допустит другого _.

2

Вы можете получить свой вывод, используя preg_filter функцию без использования цикла:

$array=array("account_bad_rooms_view-1", "account_view-2", "admin_collector_view-5", 
    "admin_collector_edit-5", "machine_service_item_edit-57", "money_view-58", "mu_edit-61"); 

$matches = preg_filter('/^.+?_([^-_]+)-.*$/', '$1', $array); 

print_r($matches); 

Выход:

Array 
(
    [0] => view 
    [1] => view 
    [2] => view 
    [3] => edit 
    [4] => edit 
    [5] => view 
    [6] => edit 
) 
+1

Я исследовал это тоже, но как насчет записей, которые не будут соответствовать шаблон? Они будут пропущены, и я верю, что их нужно держать. Я придумал [этот код] (https://ideone.com/ykiYUj). –

Смежные вопросы