Jump to content

Passar para Array palavras de uma frase começadas por XXX


KiNgPiTo
 Share

Recommended Posts

Boas pessoal 😉

O titulo está confuso, mas eu passo a explicar... Imaginamos esta string:

$varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas";

O que eu queria era passar para um array as palavras que por exemplo começam por "fra", ou seja neste caso o Array seria:

$array[0] = "frase";

$array[1] = "fracas";

$array[2] = "fracotas";

$array[3] = "fraquinhas";

Alguém me pode ajudar?

Muito obrigado  😉

Link to comment
Share on other sites

Tinha em ideia fazeres um explode da string pelos espaços, e depois usar o array_filter para "limpar" o array:

$varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas";
$vector = explode(" ", $varaux);

Depois crias uma função de filtro e passas à função array_filter como callback:

function palavrasComFra($w) {
  return (strpos($w, "fra") == 0);
}

$vector = array_filter($vector, "palavrasComFra");

O problema disto é que preserva vírgulas, pontos, etc., não sei se será um inconveniente. Não testei, btw.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Regular expression por fra[^\s]* deve de resultar...

Nunca mais me lembrei do preg_match...

Uma solução um bocado rápida que fiz foi:

<?php

$varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas";
$array = explode(" ", $varaux); //Separa por espaços e adiciona a um array...

$array2 = array(); //Inicializa o novo array

echo 'Palavras inicias por "fra":<br /><br />';

for ($i=0; $i < sizeof($array); $i++ ){

if ( preg_match( "/^fra/", $array[$i] ) ) // Se começarem por "fra"

	$array2[] = $array[$i]; //Adiciona ao novo array a posicao cujo valor corresponde a condição

}

echo '<pre>';
print_r($array2); //Imprime o novo array para testar...
echo '</pre>';

?> 

Funciona bem assim...

Tinha em ideia fazeres um explode da string pelos espaços, e depois usar o array_filter para "limpar" o array:

$varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas";
$vector = explode(" ", $varaux);

Depois crias uma função de filtro e passas à função array_filter como callback:

function palavrasComFra($w) {
  return (strpos($w, "fra") == 0);
}

$vector = array_filter($vector, "palavrasComFra");

O problema disto é que preserva vírgulas, pontos, etc., não sei se será um inconveniente. Não testei, btw.

O $vector devolve todas as palavras e não as filtradas... Sinceramente não percebi o teu método mas fiquei curioso, se me poderes explicar melhor 😉

Muito Obrigado a ambos  😉

Link to comment
Share on other sites

Quando falava em Regex, falava em preg match all, não é preciso iterar e  muito mais simples.....

<?
$varaux = "Olá, isto é uma frase com palavras fracas e fracotas e algumas ainda fraquinhas";
$matches = array();
preg_match_all('#fra[^\s\t]*#i',$varaux,$matches);
echo ('<br><br><h1 style="color:#FF0000; background-color:#FFFFFF;">$matches</h1><br>');
echo ('<pre>');
echo ("\n--------------------------------------------------------\n");
print_r($matches);
echo ("\n--------------------------------------------------------\n");
echo ('</pre>');
?>

"Quando eu for grande quero ser como o Celso"

Link to comment
Share on other sites

Tinha um problema na função de filtro, como o PHP considera 0 como um inteiro ou nulo, logo a condição retornava sempre verdadeiro para qualquer caso (encontrasse um valor ou não). Uma verificação estrita do tipo de dados resolve o problema:

function palavrasComFra($w) {
  return (strpos(strtolower($w), "fra") === 0);
}

Também corrigi para o caso de começar com uma maiúscula.

Nick antigo: softclean | Tens um projeto? | Wiki P@P

Ajuda a comunidade! Se encontrares algo de errado, usa a opção "Denunciar" por baixo de cada post.

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.