Eu quero extrair a primeira palavra de uma variável de uma seqüência de caracteres. Por exemplo, considere esta entrada:
<?php $myvalue = 'Test me more'; ?>
A saída resultante deve ser Test
, que é a primeira palavra da entrada. Como posso fazer isso?
php
string
extract
text-segmentation
todos
fonte
fonte
s($str)->words()[0]
útil, conforme encontrado nesta biblioteca autônoma .Respostas:
Você pode usar a função explodir da seguinte maneira:
fonte
explode(' ',trim($myvalue))[0]
list($firstword) = explode(' ', trim($myvalue), 1);
limit
parâmetro deve ser 2, pois deve incluir o último elemento que contém o restante da string; Eu retornaria a mesma string. A menos que uma grande matriz fosse criada, eu usaria a versão Elliot para um liner.Existe uma função de string ( strtok ) que pode ser usada para dividir uma string em strings menores ( tokens ) com base em alguns separadores. Para os fins deste encadeamento, a primeira palavra (definida como qualquer coisa antes do primeiro caractere de espaço) de
Test me more
pode ser obtida ao tokenizar a sequência no caractere de espaço.Para mais detalhes e exemplos, consulte a página de manual do strtok PHP .
fonte
strtok
é uma função estranha e perigosa que detém um estado global. O uso dessa função deve ser desencorajado.Se você tem PHP 5.3
observe que if
$myvalue
é uma string com uma palavrastrstr
não retorna nada neste caso. Uma solução poderia ser acrescentar um espaço à cadeia de teste:Isso sempre retornará a primeira palavra da string, mesmo se a string tiver apenas uma palavra
A alternativa é algo como:
Ou usando o explodir, que tem tantas respostas, não vou me incomodar em mostrar como fazê-lo.
fonte
strstr
esteja disponível no PHP, uma vez4.3.0
que não estava antes5.3.0
, quando o parâmetro opcionalbefore_needle
(que você está usando neste exemplo) foi adicionado. Apenas um aviso, porque fiquei confuso, por que você declara que este exemplo precisa5.3.0
.echo $i === false ? $myvalue : substr( $myvalue, 0, $i );
Você poderia fazer
fonte
Mesmo que seja um pouco tarde, mas o PHP tem uma solução melhor para isso:
fonte
Semelhante à resposta aceita com menos uma etapa:
fonte
Apenas no caso de você não ter certeza de que a sequência começa com uma palavra ...
fonte
trim($input)
seria suficiente neste caso: PBasta usar explodir para obter todas as palavras da entrada e gerar o primeiro elemento da matriz resultante.
fonte
Usando a função split, você também pode obter a primeira palavra da string.
fonte
strtok
é mais rápido queextract
oupreg_*
funciona.fonte
fonte
pessoalmente
strsplit
/explode
/strtok
não suporta limites de palavras, portanto, para obter uma divisão mais precisa, use expressão regular com o\w
Isso dividiria as palavras com limites para um limite de 1.
fonte
Atenciosamente, Ciul
fonte
fonte
Você pode fazer isso usando a função de string PHP substr sem convocar a string na matriz.
// saída S
fonte
fonte
Função que tokenizará a string em duas partes, primeira palavra e string restante.
Valor de retorno: Ele terá
first
eremaining
digitará a$return
matriz, respectivamente. a primeira verificaçãostrpos( $title," ") !== false
é obrigatória no caso em que a string tenha apenas uma palavra e não haja espaço nela.fonte
$ first_word = str_word_count (1) [0]
Não funciona com caracteres especiais e resultará em comportamento incorreto se forem usados caracteres especiais. Não é compatível com UTF-8.
Para mais informações, verifique se o PHP str_word_count () multibyte é seguro?
fonte
Como você não pode verificar com strok maiúsculas ou minúsculas, isso funciona perfeitamente para verificar a primeira palavra.
fonte
Sua pergunta pode ser reformulada como "substitua na cadeia o primeiro espaço e tudo o que segue por nada". Portanto, isso pode ser alcançado com uma simples expressão regular:
Eu adicionei uma chamada opcional para ltrim () para ser seguro: essa função remove espaços no início da string.
fonte
Todas as respostas aqui estão usando uma abordagem que o processador precisa pesquisar em toda a string, mesmo que a primeira palavra seja encontrada! Para cordas grandes, isso não é recomendado. Essa abordagem é ideal:
fonte
Se você quiser saber o quão rápido cada uma dessas respectivas funções é, eu corri alguns bruto de benchmarking em PHP 7.3 em seis mais votado respostas aqui (
strpos
comsubstr
,explode
comcurrent
,strstr
,explode
comtrim
,str_word_count
estrtok
) com 1.000.000 iterações cada para comparar suas velocidades.Aqui estão os resultados variáveis de duas execuções consecutivas:
E os resultados depois de inverter a ordem das funções:
Conclusão Acontece que a velocidade entre essas funções varia muito e não é tão consistente entre as execuções de teste quanto você poderia esperar. De acordo com esses testes rápidos e sujos, qualquer uma das seis funções escolhidas realizará o trabalho em um período de tempo razoável. Existem perturbações, incluindo outros processos em execução, que estão interferindo nos tempos de execução. Portanto, basta usar qualquer função que faça o sentido mais prático e legível para você como programador. Para uma visão geral da programação, consulte Programação alfabética de Donald Knuth .
fonte