Разбиение ключа массива и просмотр, если он содержит значение

У меня есть массив, я хочу проверить, есть ли у них клавиши -main.

foreach ($data as $key => $value) { if (substr($key, -5) == '-main'){ .... } } 

Если у них есть «-main», я хочу получить текст до «-main». Я делаю:

 $myVar = substr($key, 0, -5); 
  1. Есть ли более эффективный способ разделения ключа, поэтому мне не нужно делать две подстроки?

  2. Возможно, я больше не хочу использовать «-main» и хочу использовать объект поиска другой длины, возможно, как переменную. Тогда мне нужно было бы сделать знак персонажа, а не указывать -5. Есть ли способ включить переменную без необходимости делать число символов?

Есть и другие способы, но я считаю, что проще всего протестировать и захватить:

 $needle = '-main'; foreach ($data as $key => $value) { if (preg_match("/(.*)$needle\$/", $key, $match)){ $myVar = $match[1]; } } 
  • Проверьте соответствие $needle в конце строки $ и захватите все перед ним (.*)
  • Если найдено, назначьте материал из первой группы захвата (.*) $myVar

Вы также можете использовать strstr() , но вам нужно будет решить, как обращаться с $myVar как false, если $needle не найден:

 if ($myVar = strstr($key, $needle, true)){ .... } 

Найти его где угодно в $key и захватить все остальное:

 if (strpos($key, $needle) !== false){ $myVar = str_replace($needle, '', $key); }