У меня есть массив, я хочу проверить, есть ли у них клавиши -main.
foreach ($data as $key => $value) { if (substr($key, -5) == '-main'){ .... } }
Если у них есть «-main», я хочу получить текст до «-main». Я делаю:
$myVar = substr($key, 0, -5);
Есть ли более эффективный способ разделения ключа, поэтому мне не нужно делать две подстроки?
Возможно, я больше не хочу использовать «-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); }