Разделение строк в PHP и получение последней части

Мне нужно разбить строку на PHP на «-» и получить последнюю часть.

Итак, из этого:

ABC-123-хуг-789

Я ожидаю получить

"789"

Это код, который я придумал:

substr(strrchr($urlId, '-'), 1) 

который работает отлично, за исключением:

Если моя строка ввода не содержит «-», я должен получить всю строку, например:

123

Мне нужно вернуться

123

и это должно быть как можно быстрее. Любая помощь приветствуется!

split($pattern,$string) разделяет строки внутри заданного шаблона или регулярного выражения (он устарел с 5.3.0)

preg_split($pattern,$string) разделяет строки в заданном шаблоне регулярного выражения

explode($pattern,$string) разделяет строки в заданном шаблоне

end($arr) получить последний элемент массива

Так:

end(split('-',$str))

end(preg_split('/-/',$str))

end(explode('-',$str))

Вернет последний элемент строки с разделом.


И есть хардкорный способ сделать это:

 $str = '1-2-3-4-5'; echo substr($str, strrpos($str, '-') + 1); // | '--- get the last position of '-' and add 1(if don't substr will get '-' too) // '----- get the last piece of string after the last occurrence of '-' 
 $string = 'abc-123-xyz-789'; $exploded = explode('-', $string); echo end($exploded); 

EDIT :: Наконец-то удалось удалить проблему E_STRICT

Просто проверьте, существует ли разделительный символ или нет или нет:

 if (strpos($potentiallyDelimitedString, '-') !== FALSE) { found delimiter, so split } 

Этот код будет делать это

 <?php $string = 'abc-123-xyz-789'; $output = explode("-",$string); echo $output[count($output)-1]; ?> 

Как говорится в этом сообщении :

 end((explode('-', $string))); 

который не будет вызывать предупреждение E_STRICT в PHP 5 ( магия PHP ). Хотя предупреждение будет выпущено на PHP 7 , поэтому добавление @ перед ним может быть использовано в качестве обходного пути.

Как уже упоминалось другими, если вы не присвоите переменную результат explode() , вы получите сообщение:

E_STRICT: Строгие стандарты: только переменные должны передаваться по ссылке

Правильный способ:

 $words = explode('-', 'hello-world-123'); $id = array_pop($words); // 123 $slug = implode('-', $words); // hello-world 

Вы можете использовать array_pop в сочетании с взрывом

Код:

 $string = 'abc-123-xyz-789'; $output = array_pop(explode("-",$string)); echo $output; 

ДЕМО : Нажмите здесь

Так как explode() возвращает массив, вы можете добавить квадратные скобки непосредственно в конец этой функции, если вам известна позиция последнего элемента массива.

 $email = 'name@example.com'; $provider = explode('@', $email)[1]; echo $provider; // example.com 

Или другим способом является list() :

 $email = 'name@example.com'; list($prefix, $provider) = explode('@', $email); echo $provider; // example.com 

Если вы не знаете позицию:

 $path = 'one/two/three/four'; $dirs = explode('/', $path); $last_dir = $dirs[count($dirs) - 1]; echo $last_dir; // four 

Вы можете сделать это следующим образом:

 $str = "abc-123-xyz-789"; $last = array_pop( explode('-', $str) ); echo $last; //echoes 789