Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

KiNgPiTo

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

Mensagens Recomendadas

KiNgPiTo

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  ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
KiNgPiTo

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  ;)

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
cyclop

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"

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
softklin

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.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.