Мне нужно разбить строку на 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