Chcę wyodrębnić pierwsze słowo zmiennej z ciągu. Na przykład weź te dane wejściowe:
<?php $myvalue = 'Test me more'; ?>
Wynikowe wyjście powinno być Test
pierwszym słowem wejścia. W jaki sposób mogę to zrobić?
Chcę wyodrębnić pierwsze słowo zmiennej z ciągu. Na przykład weź te dane wejściowe:
<?php $myvalue = 'Test me more'; ?>
Wynikowe wyjście powinno być Test
pierwszym słowem wejścia. W jaki sposób mogę to zrobić?
s($str)->words()[0]
pomocny, co znajdziesz w tej samodzielnej bibliotece .Odpowiedzi:
Funkcji wybuchania można użyć w następujący sposób:
źródło
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
parametr powinien wynosić 2, ponieważ musi zawierać ostatni element, który zawiera resztę ciągu; 1 zwróciłby ten sam ciąg. O ile nie powstanie duża tablica, wybrałbym wersję Elliota dla jednej wkładki.Istnieje funkcja tekstowa ( strtok ), której można użyć do podzielenia łańcucha na mniejsze ciągi ( tokeny ) w oparciu o niektóre separatory. Na potrzeby tego wątku pierwsze słowo (zdefiniowane jako cokolwiek przed pierwszym znakiem spacji)
Test me more
można uzyskać przez tokenizację ciągu znaków spacji.Aby uzyskać więcej informacji i przykładów, zobacz stronę podręcznika PHP strtok .
źródło
strtok
to dziwna i niebezpieczna funkcja, która utrzymuje stan globalny. Należy odradzać korzystanie z tej funkcji.Jeśli masz PHP 5.3
zwróć uwagę, że if
$myvalue
jest łańcuchem zawierającym jedno słowostrstr
, w tym przypadku nic nie zwraca. Rozwiązaniem mogłoby być dodanie spacji do ciągu testowego:To zawsze zwróci pierwsze słowo ciągu, nawet jeśli łańcuch zawiera tylko jedno słowo
Alternatywą jest coś takiego:
Lub używając eksploduj, które ma tak wiele odpowiedzi, nie zawracam sobie głowy wskazywaniem, jak to zrobić.
źródło
strstr
jest dostępny w PHP, ponieważ4.3.0
nie był wcześniej5.3.0
, kiedybefore_needle
dodano opcjonalny parametr (którego używasz w tym przykładzie). Tylko uwaga, bo byłem zdezorientowany, dlaczego twierdzisz, że ten przykład potrzebuje5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Mógłbyś
źródło
Chociaż jest trochę późno, ale PHP ma na to lepsze rozwiązanie:
źródło
Podobna do zaakceptowanej odpowiedzi z jednym krokiem mniej:
źródło
Na wypadek, gdybyś nie był pewien, czy ciąg zaczyna się od słowa ...
źródło
trim($input)
w tym przypadku wystarczyłoby: PPo prostu użyj eksplodowania, aby pobrać każde słowo z wejścia i wyprowadzić pierwszy element wynikowej tablicy.
źródło
Używając funkcji split, możesz również pobrać pierwsze słowo z łańcucha.
źródło
strtok
jest szybszy niżextract
lubpreg_*
funkcje.źródło
źródło
osobiście
strsplit
/explode
/strtok
nie obsługuje granic słów, więc aby uzyskać bardziej dokładny podział, użyj wyrażenia regularnego z rozszerzeniem\w
Spowodowałoby to podzielenie słów z granicami do 1.
źródło
Pozdrawiam Ciul
źródło
źródło
Możesz to zrobić za pomocą funkcji ciąg znaków PHP bez konwertowania ciągu na tablicę.
// wyjście S
źródło
źródło
Funkcja, która podzieli łańcuch na dwie części, pierwsze słowo i pozostały ciąg.
Wartość zwracana: będzie miała odpowiednio
first
iremaining
klucz w$return
tablicy. pierwsze sprawdzeniestrpos( $title," ") !== false
jest obowiązkowe w przypadku, gdy łańcuch ma tylko jedno słowo i nie ma w nim spacji.źródło
$ first_word = str_word_count (1) [0]
Nie działa ze znakami specjalnymi i spowoduje nieprawidłowe zachowanie, jeśli zostaną użyte znaki specjalne. Nie jest przyjazny dla UTF-8.
Aby uzyskać więcej informacji, sprawdź, czy wielobajtowe bezpieczeństwo PHP str_word_count () jest bezpieczne?
źródło
Ponieważ nie możesz sprawdzić wielkich lub małych liter za pomocą strok, działa to doskonale przy sprawdzaniu pierwszego słowa.
źródło
Twoje pytanie można przeformułować jako „zastąp w ciągu znaków pierwszą spację i wszystko następujące po nim nic”. Można to osiągnąć za pomocą prostego wyrażenia regularnego:
Dla bezpieczeństwa dodałem opcjonalne wywołanie ltrim (): ta funkcja usuwa spacje na początku łańcucha.
źródło
Wszystkie odpowiedzi tutaj wykorzystują podejście, zgodnie z którym procesor musi przeszukać cały ciąg, nawet jeśli zostanie znalezione pierwsze słowo! W przypadku dużych strun nie jest to zalecane. To podejście jest optymalne:
źródło
Jeśli chcesz wiedzieć, jak szybko każdy z tych odpowiednich funkcji jest pobiegłem trochę surowej analizy porównawczej w PHP 7.3 na sześciu najbardziej głosowało odpowiedź tutaj (
strpos
zsubstr
,explode
zcurrent
,strstr
,explode
ztrim
,str_word_count
istrtok
) z 1.000.000 powtórzeń każdego porównać ich prędkości.Oto różne wyniki z 2 kolejnych przebiegów:
A wyniki po odwróceniu kolejności funkcji:
Wniosek Okazuje się, że szybkość między tymi funkcjami jest bardzo różna i nie jest tak spójna między przebiegami testów, jak można by się spodziewać. Zgodnie z tymi szybkimi i brudnymi testami, każda z sześciu wybranych funkcji wykona zadanie w rozsądnym czasie. Występują zakłócenia, w tym inne uruchomione procesy, które kolidują z czasem wykonywania. Więc po prostu użyj dowolnej funkcji, która jest najbardziej praktyczna i czytelna dla Ciebie jako programisty. Aby uzyskać większy obraz programowania, zobacz Donald Knuth's Literate Programming .
źródło