Я хочу извлечь первое слово переменной из строки. Например, возьмите этот вход:
<?php $myvalue = 'Test me more'; ?>
Результирующий вывод должен быть Test
, который является первым словом ввода. Как я могу это сделать?
Я хочу извлечь первое слово переменной из строки. Например, возьмите этот вход:
<?php $myvalue = 'Test me more'; ?>
Результирующий вывод должен быть Test
, который является первым словом ввода. Как я могу это сделать?
s($str)->words()[0]
полезным, как найти в этой автономной библиотеке .Ответы:
Вы можете использовать функцию разнесения следующим образом:
источник
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
параметр должен быть равен 2, поскольку он должен включать последний элемент, содержащий остальную часть строки; Я бы просто вернул ту же самую строку. Если не будет создан большой массив, я бы выбрал версию Elliot для одного лайнера.Существует строковая функция ( strtok ), которую можно использовать для разбиения строки на меньшие строки ( токены ) на основе некоторых разделителей. Для целей этой цепочки первое слово (определенное как что-либо перед первым пробелом)
Test me more
может быть получено путем токенизации строки на пробел.Для получения более подробной информации и примеров, смотрите страницу руководства по strtok PHP .
источник
strtok
это странная и опасная функция, которая содержит глобальное состояние. Использование этой функции не рекомендуется.Если у вас есть PHP 5.3
Обратите внимание, что в этом случае
$myvalue
строка if с одним словомstrstr
ничего не возвращает. Решением может быть добавление пробела к тестовой строке:Это всегда будет возвращать первое слово строки, даже если строка содержит только одно слово
Альтернатива что-то вроде:
Или используя explode, у которого так много ответов, и я не стану указывать, как это сделать.
источник
strstr
он доступен в PHP, так как4.3.0
его не было раньше5.3.0
, когдаbefore_needle
был добавлен необязательный параметр (который вы используете в этом примере). Просто замечание, потому что я запутался, зачем вы заявляете, что этот пример нужен5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Вы могли бы сделать
источник
Хотя уже немного поздно, но у PHP есть одно лучшее решение для этого:
источник
Аналогично принятому ответу с одним меньшим шагом:
источник
На всякий случай, если вы не уверены, что строка начинается со слова ...
источник
trim($input)
было бы достаточно в этом случае: PПросто используйте explode, чтобы получить каждое слово ввода и вывести первый элемент полученного массива.
источник
Используя функцию split, вы также можете получить первое слово из строки.
источник
strtok
быстрее чемextract
илиpreg_*
функционирует.источник
источник
лично
strsplit
/explode
/strtok
не поддерживает границы слов, поэтому для более аккуратного разделения используйте регулярное выражение с\w
Это разделит слова с границами до предела 1.
источник
С уважением, Ciul
источник
источник
Вы можете сделать это, используя PHP строковую функцию substr без преобразования строки в массив.
// вывод S
источник
источник
Функция, которая разбивает строку на две части: первое слово и оставшуюся строку.
Возвращаемое значение: будет иметь
first
иremaining
ключ в$return
массиве соответственно. Первая проверкаstrpos( $title," ") !== false
обязательна в случае, если строка содержит только одно слово и без пробела.источник
$ first_word = str_word_count (1) [0]
Не работает со специальными символами и приведет к неправильному поведению, если используются специальные символы. Это не UTF-8 дружественный.
Для получения дополнительной информации проверьте, является ли PHP str_word_count () многобайтовым безопасно?
источник
Поскольку вы не можете проверить с помощью штрихов для прописных или строчных букв, это прекрасно работает для проверки первого слова.
источник
Ваш вопрос можно переформулировать как «замените в строке первый пробел и все, что следует за ним, ничем». Так что это может быть достигнуто с помощью простого регулярного выражения:
Я добавил необязательный вызов ltrim () для безопасности: эта функция удаляет пробелы в начале строки.
источник
Все ответы здесь используют подход, который необходим процессору для поиска по всей строке, даже если первое слово найдено! Для больших струн это не рекомендуется. Такой подход оптимален:
источник
Если вы хотите знать , как быстро каждый из этих соответствующих функций, я побежал некоторые сырой бенчмаркинга в PHP 7.3 на шести наиболее проголосовали ответы здесь (
strpos
сsubstr
,explode
сcurrent
,strstr
,explode
сtrim
,str_word_count
аstrtok
) с 1,000,000 итераций каждого , чтобы сравнить их скорость.Вот переменные результаты от 2 последовательных прогонов:
И результаты после инвертирования порядка функций:
Заключение Оказывается, что скорость между этими функциями варьируется в широких пределах и не настолько согласована между запусками тестов, как вы могли бы ожидать. Согласно этим быстрым и грязным тестам, любая из шести выбранных функций выполнит работу за разумное время. Существуют возмущения, в том числе другие запущенные процессы, которые влияют на время выполнения. Так что просто используйте любую функцию, которая будет наиболее практичной и понятной для вас как для программиста. Для большей картины программирования см . Грамотное программирование Дональда Кнута .
источник