Como separa palavras em um array para comparar

É 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

Separar caracteres de uma string no PHP

Como pegar mapas para UrbanTerror facilmente

Configurar o alsa sem o alsaconf

Mostrar os campos de uma tabela do PostgreSQL com PHP

Janelas sem borda no Fluxbox

Leitura recomendada

Validando endereço de e-mail em PHP

Separar caracteres de uma string no PHP

Remover espaços no fim de linha - Eclipse

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

Utilizando o loop FOR 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


Olá André, tudo jóia.

Bacana esse algorítimo, já tinha ouvido falar do bubble sort, mas como funciona? Eu entendi parte do código mas não todo, acho que por conta dos métodos ruby. Eu entendi que guarda o tamanho do array em n e inicia o loop, esse loop é a mesma coisa que o while? Depois atribuiu false a variável swapped, dae entra no (n-1).times do |i|, isso é equivalente a um for? Depois entra no if comparando se a posição atual for maior que a posição posterior, então ele vai fazer array[i], array[i+1] = array[i+1], array[i], que não entendi muito bem, e o swapped muda pra true inidcando que foi alterado alguma posição e então tem outro if que se o swapped não for falso, ele encerra e sai desse laço e no fim retorna o array. Poderia me explicar melhor?

Outra questão é que esse método só resolve parte do problema. O grande problema dessa questão é comparar os valores do array, no caso as strings amor e roma, e doce e ecod, ele tem que comparar avaliando que o inverso de amor é roma e são iguais ou vice-versa, mas o importante ele tem que constatar que são iguais, assim como doce e ecod, são iguais , pois o inverso de ecod é doce ou o inverso de ecod é doce que é igual a que já existe que tbm é doce. ou seja ele tem que avaliar as strings em que se o inverso dela for igual ela vai reverter essas strings, e ficará strings iguais dentro do array, e com strings iguais, ele irá retirar essas strings e sobrará o array sem essas strings duplicadas. exemplo:

['code', 'doce', 'ecod', 'report', 'frame', 'amor', 'repo', 'roma'] # aqui ele verificará se os valores invertidos de cada string são iguais as strings passada

Caso tenham strings iguais ele irá então reverter essas strings que ele verificou que são iguais. OBS: Isso na minha maneira de pensar, pois se tiver como já retirá-las assim que se verifica que são iguais, melhor. Mas de qualquer forma penso eu que terar que compará-las.

Então depois de reverter as strings iguais, o array ficará assim:

['code', 'doce', 'doce', 'report', 'frame', 'amor', 'repo', 'amor']

Depois de reverter as strings iguais, terá então que retirá-las, que no caso pode-se usar o código que informei e o array ficará assim:

['code', 'report', 'frame', 'repo']

Por fim, aí sim vem o método bubble_sort que colocará agora o array com as strings já retiradas em ordem alfabética, que ficará assim:

['code', 'frame', 'repo', 'report']

Agora que vem a grande dúvida, como comparo cada string do próprio array e as identifico? Creio que identificando eu possa manipular essa string passando a posição em que ela foi identificada, fazendo a reversão e então gerando um array novo com essas strings revertidas e assim retirar as que estão iguais, no entanto como comparar as strings dentro do array ou até o próprio array?