Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Reparem no script abaixo:
$titulo = "[Dúvida] Download do jogo Splinter Cell"; //Determina a variável $titulo
$prefixo = '[Dúvida]';
$pesquisar = preg_match($prefixo,$titulo,$juntos, PREG_OFFSET_CAPTURE); //Verifica se $prefixo existe em $titulo
if ($pesquisar > 0){ //Se o prefixo existir
$prefixo_colorido = "<font color='red'>".$prefixo."</font>"; //Determina a variável $prefixo_colorido
echo substr_replace($titulo , $prefixo_colorido , 0,strlen($prefixo)); //Substitui $prefixo se presente no $titulo por $prefixo_colorido
}
Está quase do jeito que eu queria, o que eu quero mesmo é poder pesquisar múltiplos $prefixos na variável $titulo, para poder fazer uma espécie de banco de dados nos arrays como por exemplo:
$prefixo = '[Dúvida],[Tutorial],[Resolvida]';
Ou talvez quem sabe:
$prefixo = array(
'[Dúvida]',
'[Tutorial]',
'[Resolvida]',
);
Não importa a maneira eu apenas quero poder pesquisar mais de um $prefixo na string $titulo.
Bom então é isso, aguardo uma resposta.
Abraços,
bigCheat.
>
faça um loop para percorrer o array, fazendo a verificação em cada iteração
só aconselho usar strstr ou strpos para verificação. Usar ER só para isso não compensa, devido ao tempo de compilação delas. Só use ER's se for para casar padrões. Você apenas quer verificar strings
Olá Beraldo, obrigado pela resposta. Mais poderia por favor me explicar como eu deveria determinar esse while, o código etc. ?
Abraços,
bigCheat.
faça um for que vai de 0 a count($prefixo)-1 (arrays começam em zero). Use $prefixo[$contador] em strstr, ou strpos, para verificar se o valor desse índice do array está presente em $titulo
>
faça um for que vai de 0 a count($prefixo)-1 (arrays começam em zero). Use $prefixo[$contador] em strstr, ou strpos, para verificar se o valor desse índice do array está presente em $titulo
Se era assim que quis dizer:
<?php
//Colorir prefixo nos tópicos (SMF)
$titulo = "[Dúvida] Download do jogo Splinter Cell"; //Determina a variável $titulo
$prefixo = array('[Dúvida]','[Tutorial]');
for($i = 1; $i < count($prefixo)-1;){
$result = strstr($titulo , $prefixo[$i]);
echo $result;
}
?>
Tentei e não deu certo, poderia me explicar mais detalhadamente o código? :)
como vocÊ usou menor (<), não precisa ir até count()-1; basta ir até count(). o sinal de menor faz o trabalho do "-1"
e faltou incrementar $i: $i++
>
como vocÊ usou menor (<), não precisa ir até count()-1; basta ir até count(). o sinal de menor faz o trabalho do "-1"
e faltou incrementar $i: $i++
Agora que coloquei dessa maneira:
<?php
//Colorir prefixo nos tópicos (SMF)
$titulo = "[Dúvida] Download do Game Splinter Cell"; //Determina a variável $titulo
$prefixo = array(
'[Dúvida]',
'[Tutorial]',
'[LOL]',
);
$cor = array(
'red',
'blue',
'purple',
);
for($i = 0; $i < count($prefixo);$i++){
$resultado = strstr($titulo , $prefixo[$i]);
if ($resultado == $titulo){
$n_prefixo = $i;
}
}
$pesquisar = preg_match($prefixo[$n_prefixo],$titulo,$juntos, PREG_OFFSET_CAPTURE); //Verifica se $prefixo existe em $titulo
if ($pesquisar > 0){ //Se o prefixo existir
$prefixo_colorido = "<font color='red'>".$prefixo[$n_prefixo]."</font>"; //Determina a variável $prefixo_colorido
echo substr_replace($titulo , $prefixo_colorido , 0,strlen($prefixo[$n_prefixo])); //Substitui $prefixo se presente no $titulo por $prefixo_colorido
}
?>
Creio que esteja certo, agora gostaria que ele substituisse todos os itens encontrados na string. Tem como?
Abraços.
use str_replace para trocar as strings
>
use str_replace para trocar as strings
http://www.php.net/str_replace
Está dando tudo certo do jeito como eu precisava veja como está o código:
<?php
//Colorir prefixo nos tópicos (SMF)
$titulo = "[Tutorial] Download do Game Splinter Cell"; //Determina a variável $titulo
$prefixo = array(
'[Dúvida]',
'[Tutorial]',
'[Vídeo-Aula]',
);
$cor = array(
'red',
'blue',
'purple',
);
for($i = 0; $i < count($prefixo);$i++){
$resultado = strstr($titulo , $prefixo[$i]);
if ($resultado == $titulo){
$n_prefixo = $i;
}
}
$pesquisar = preg_match($prefixo[$n_prefixo],$titulo,$juntos, PREG_OFFSET_CAPTURE); //Verifica se $prefixo existe em $titulo
if ($pesquisar > 0){ //Se o prefixo existir
$prefixo_colorido = "<font color='".$cor[$n_prefixo]."'>".$prefixo[$n_prefixo]."</font>"; //Determina a variável $prefixo_colorido
echo str_replace($prefixo , $prefixo_colorido, $titulo); //Substitui $prefixo se presente no $titulo por $prefixo_colorido
}
?>
Agora gostaria de que ele substituísse os itens de forma diferente, por exemplo eu estou mandando ele fazer isso nos prefixos que forem do índice de valor igual a $n_prefixo que é igual a $i que é igual ao prefixo que ele encontrou na string $titulo:
$prefixo_colorido = "<font color='".$cor[$n_prefixo]."'>".$prefixo[$n_prefixo]."</font>";
Agora gostaria que ele procurasse a quantidade que os $prefixos existem e os colorisse de forma diferente. Por
exemplo vamos supor que ele encontrou os prefixos [Dúvida], [Tutorial] e [Vídeo-Aula] na string $titulo que tem cores(cores determinadas em $cor) diferentes então gostaria que ele colorisse os indíces da seguinte forma:
$prefixo[1] com sua $cor[1]$prefixo[2] com sua $cor[2]
Múltiplamente entende? Tem alguma forma de fazer isso assim?
Espero que tenha me entendido.
Abraços.
Fazer um loop com expressão regular só vai consumir recursos desnecessários.
<?php
$titulo = '[Dúvida] Download do Game Splinter Cell';
$prefixos = array( 'dúvida' , 'tutorial' , 'video-aula' );
$matches = array();
if ( preg_match( sprintf( '/\[(?<tipo>%s)\]/i' , implode( '|' , $prefixos ) ) , $titulo , $matches ) ) {
switch ( strtolower( $matches[ 'tipo' ] ) ) {
case 'dúvida' :
$cor = 'red';
break;
case 'tutorial' :
$cor = 'blue';
break;
case 'video-aula' :
$cor = 'purple';
break;
}
echo str_replace( $matches[ 'tipo' ] , sprintf( '<font color="%s">%s</font>' , $cor , $matches[ 'tipo' ] ) , $titulo );
} else {
echo $titulo;
}
Saída:
[<font color="red">Dúvida</font>] Download do Game Splinter Cell
Bom deu tudo certinho aqui muito obrigado, agora só uma coisa. Eu não gosto só de pegar o código pronto gosto de aprender como ele funciona, dei uma pesquisada no site do PHP e tirei algumas conclusões agora ficou uma dúvida eu não entendi como funciona o sprintf tem como me repassar um resumo da função? E pra que colocar esses '/\[(?<' antes?
Abraços,
bigCheat.
>
E pra que colocar esses '/\(?<' antes?
Dê uma lida na documentação das expressões regulares, você vai compreender o significado de cada um dos caracteres utilizados :seta: [http://perldoc.perl.org/perlre.html#Regular-Expressions
faça um loop para percorrer o array, fazendo a verificação em cada iteração
só aconselho usar strstr ou strpos para verificação. Usar ER só para isso não compensa, devido ao tempo de compilação delas. Só use ER's se for para casar padrões. Você apenas quer verificar strings