Separar palavras de uma string no PHP

Publicado por albert guedes em 06/10/2009

[ Hits: 49.442 ]

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

Instalação pratica do novo kernel 2.6.20

Imprima textos inteiros com o comando "echo"

ob_start() - capturar páginas na web ou geradas na hora usando PHP e enviá-las por email

Assista vídeos com suas suas músicas preferidas

Convertendo inteiros para ascii e ascii para inteiros em C

Leitura recomendada

Entenda Expressões Regulares em PHP

Imprimindo números no formato de moeda em PHP

Utilizando o loop FOR em PHP

Separar caracteres de uma string no PHP

PHP - Como comparar duas strings case insensitive

  

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