Separar palavras de uma string no PHP

Publicado por albert guedes em 06/10/2009

[ Hits: 47.437 ]

Blog: http://www.socrates.if.usp.br/~arcguede

 


Separar palavras de uma string no PHP



É muito pra lá de comum em formulários web recebermos um campo onde a variável é uma frase.

Dizendo em termos de programação, uma frase seria conjuntos de caracteres separados por algum(ns) caractere(s).

No caso das frases usadas por nós humanos (sic), uma frase é formada por conjunto de letras separados por um caractere branco. No caso de datas, por exemplo '14/09/1970', a barrinha '/' separa os conjuntos de números.

Como se percebe, a 'frase' que se trabalha em programação é mais geral do que a nossa linguística. E nesse aspecto, um modo de separar esses conjuntos de caracteres é uma "necessidade básica" de todo programador.

Para fazer isso em PHP, considere a string '$frase'

$frase="O rato roeu a roupa do rei de roma.";

Para separar cada palavra dessa variável, usamos a função explode():

$array=explode(" ",$frase);

e assim, cada célula de $array guardará cada palavra da frase. Exemplo:

print $array[3]; // Imprimirá a palavra 'roeu'.

Explicando o explode(): essa função pega uma delimitador (que pode ser um ou mais caracteres), separa a string de acordo com esse delimitador e retorna para uma string onde palavra separada fica numa célula sozinha. Sua forma é:

$array=explode($delimitador,$string);

No exemplo, o delimitador foi o caractere branco (o mais requisitado por aí). No caso da data, teríamos:

$data='14/09/1970';

$array=explode("/",$data);

print $array[2]; // Imprimirá '09'.

Mas o explode é mais geral que isso. Pegue a string:

$string="347812396fcsd7yc123vfqwe4jh23123e312";

Percebam que tem o conjunto '123' se repetindo nela. Esse pode ser o delimitador da string.

$array=explode("123",$string);

e teremos:

print $array[0]; // Imprime ''3478".
print $array[1]; // Imprime ''96fcsd7yc".
print $array[2]; // Imprime ''vfqwe4jh23".
print $array[3]; // Imprime ''e312".

Podem verificar.

Mas para trabalhar decentemente com essa separação de 'frases', precisamos saber quantas palavras há nela. Para isso fazemos:

$array=explode("123",$string);
$n_palavras=count($array);

for($i=0 ; $i < $n_palavras ; $i++ ){
    print "$array[$i] \n";
}

Que imprimirá:

3478
96fcsd7yc
vfqwe4jh23
e312

Aqui a função count() conta quantas células tem em $array e retorna esse número.

Não foi uma coisa rápida, mas espero que os iniciantes peguem esses conceitos, para daqui pra frente conseguirem caminhar um bom trecho da estrada sozinhos.

Até a próxima dica.

Outras dicas deste autor

Resolvendo problema de conexão do Skype Beta no Debian

Usando repositórios do Yum no Zypper do SuSE

Placa Wireless Atheros AR5001 - Configuração no Debian Squeeze

Assista vídeos redimensionados à sua escolha com o MPlayer

Instalação pratica do novo kernel 2.6.20

Leitura recomendada

Entenda Expressões Regulares em PHP

Utilizando o loop FOR em PHP

Remover espaços no fim de linha - Eclipse

PHP: Substituindo somente a primeira ocorrência de uma palavra na string

Imprimindo números no formato de moeda em PHP

  

Comentários
[1] Comentário enviado por removido em 06/08/2011 - 02:56h

$frase = 'viva o linux porque nós amamos a liberdade';
$palavras = explode( ' ', $frase );
foreach( $palavras as $palavra )
{
echo "\n" . '<br />' . $palavra;
}

[2] Comentário enviado por sidnei.weber em 18/08/2011 - 22:38h

Teria como fazer para esse caso, separar cada palavra da frase, inserir um caractere antes de cada palavra e retornar uma nova frase como os caracteres adicionados para uma nova variavel?

Acho q deu pra entender né hehe

[3] Comentário enviado por albertguedes em 19/08/2011 - 00:43h

Sim, no caso das palavras, se você tem uma array "$letras[]"com as letras que você quer, então basta fazer

for($i=0 ; $i < $n_palavras ; $i++ ){
$array[$i] = $letras[$i].$array[i];
}

Ai casa casa de "$array[]" têm a letra que está em "$letras[]" adicionado.
Para ter a frase de volta, é só fazer

$frase = '';

for($i=0 ; $i < $n_palavras ; $i++ ){
$frase.= $array[i]." ";
}

onde coloquei ." " porque é o espaço entre as palavras, sem isso as palavras ficariam juntas.

Em um passo só, você pode fazer tudo assim:

$frase = '';
for($i=0 ; $i < $n_palavras ; $i++ ){
$frase.= $letras[$i].$array[i]." ";
}

Oque gera um código melhor. Tenta isso, qualquer dúvida posta ai. Abraços.

[4] Comentário enviado por alexlavalle em 13/08/2018 - 08:12h

Bom dia pessoal tudo bem?

Estou com um problema um pouco sério, e espero a ajuda de vocês.
É o seguinte, eu tenho meu codigo:

<?php
$arrContextOptions=array(
"ssl"=>array(
"verify_peer"=>false,
"verify_peer_name"=>false,
),
);
$response = file_get_contents("https://api.binance.com/api/v1/ticker/allPrices", false, stream_context_create($arrContextOptions));
$string = $response;
$array = explode(',', $string);
foreach($array as $valores)
{
echo $valores . '<br />';
}
?>

Até ai funciona perfeitamente, com o seguinte resultado:

[{"symbol":"ETHBTC"
"price":"0.04947500"}
{"symbol":"LTCBTC"
"price":"0.00927500"}
{"symbol":"BNBBTC"
"price":"0.00181990"}
{"symbol":"NEOBTC"
"price":"0.00291900"}
{"symbol":"QTUMETH"
"price":"0.01460400"}
{"symbol":"EOSETH"
"price":"0.01598300"}
{"symbol":"SNTETH"
"price":"0.00012867"}
{"symbol":"BNTETH"
"price":"0.00523000"}
{"symbol":"BCCBTC"
"price":"0.09033300"}
{"symbol":"GASBTC"
"price":"0.00076500"}
{"symbol":"BNBETH"
"price":"0.03678000"}
{"symbol":"BTCUSDT"
"price":"6442.36000000"}
{"symbol":"ETHUSDT"
"price":"318.58000000"}
{"symbol":"OAXETH"
"price":"0.00052230"}
{"symbol":"DNTETH"
"price":"0.00007482"}]

Aquilo que eu gostaria e não consigo, seria:
pra cada linha imprimisse o nome da moeda por exemplo: ETHBTC e o seu respectivo valor: 0.04947500, separado pelos pares, por exemplo: BTC , ETH E USD , pois, temos varias moedas com diferentes pares.
E depois eu vou gravar no bco de dados, e sempre que o programa fazer o reload para atualizar os dados ele faria um upgrade na tabela, até ai isso é pra depois.

Aquilo que eu consigo entender, todas as informações estao dentro de uma string que começa com {[ e fecha }] e ai eu nao consigo mais fazer nada. rsrsrs

Desculpem o texto grande. rsrs

Se alguem poder me ajudar, ficarei mto grato.

Alexander





Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts