Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

naofuieu

[Resolvido] Função para procurar string dentro de outra

Recommended Posts

Galera, qual seria a função em PHP equivalente à InStr em ASP?

Tipo, a InStr procura um a string informada dentro de outra e retorna sua posição, caso encontrada (começando do 0), ou -1 caso não a encontre?

Eu encontrei uma em PHP, a strpos, mas ela sempre dá trabalho pra mim qdo a string tá no começo da outra, pq encontrando aí ou não encontrando, ela retorna 0!

 

Não teria outra não? PHP tem tantas funções... pq n poderia ter essa?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Galera, qual seria a função em PHP equivalente à InStr em ASP?

Tipo, a InStr procura um a string informada dentro de outra e retorna sua posição, caso encontrada (começando do 0), ou -1 caso não a encontre?

Eu encontrei uma em PHP, a strpos, mas ela sempre dá trabalho pra mim qdo a string tá no começo da outra, pq encontrando aí ou não encontrando, ela retorna 0!

 

Não teria outra não? PHP tem tantas funções... pq n poderia ter essa?

strpos

 

(PHP 4, PHP 5)

 

strpos — Encontra a posição da primeira ocorrência de uma string

Descrição

int strpos (string $haystack, string $needle [, int $offset] )

 

Retorna a posição numérica da primeira ocorrência de needle dentro de haystack. Esta função pode ter uma string inteira como o parâmetro needle e toda a string será usada.

Compartilhar este post


Link para o post
Compartilhar em outros sites

strpos

 

(PHP 4, PHP 5)

 

strpos — Encontra a posição da primeira ocorrência de uma string

Descrição

int strpos (string $haystack, string $needle [, int $offset] )

 

Retorna a posição numérica da primeira ocorrência de needle dentro de haystack. Esta função pode ter uma string inteira como o parâmetro needle e toda a string será usada.

Ei, tio, tu prestou atenção no que eu disse?

Qdo a strpos encontra a string procurada no início da outra, ela retorna "0" também!

tipo:

<?phpecho strpos("Caramba, onde está?","Caramba");echo strpos("Caramba, onde está?","Uou!");?>
Ambas retornam "0"!

Além do mais, strpos é case-sensitive. Não tem como deixá-la insensitive ou arranjar outra função que faça o que eu quero não?

 

Talvez strstr() resolva seu problema.

 

Abraços,

Beraldo

Eu também tinha pensado nessa, mas não serve pra mim, pois eu gostaria somente de determinar se uma string está dentro de outra...

Mas valeu a intenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Qdo a strpos encontra a string procurada no início da outra, ela retorna "0" também!

tipo:

<?php
echo strpos("Caramba, onde está?","Caramba");
echo strpos("Caramba, onde está?","Uou!");
?>
Ambas retornam "0"!

[/code]

Justamente por isso o Manual nos orienta a utilizar o operador idêntico (===):

Atenção

 

Esta função pode retornar o booleano FALSE, mas também pode retornar um valor não-booleano que pode ser avaliado como FALSE, como 0 ou "". Leia a seção em Booleanos para maiores informações. Utilize o operador === para testar o valor retornado por esta função.

Fonte: http://www.php.net/strpos

 

 

 

 

Além do mais, strpos é case-sensitive. Não tem como deixá-la insensitive ou arranjar outra função que faça o que eu quero não?

Uma solução é converter a string para minúsculas ou maiúsculas antes de usar strpos(), já que o tipo da caixa (caixa alta ou baixa) não interfere na posição dos caracteres.

 

 

 

 

Talvez strstr() resolva seu problema.

 

Abraços,

Beraldo

Eu também tinha pensado nessa, mas não serve pra mim, pois eu gostaria somente de determinar se uma string está dentro de outra...

Mas valeu a intenção.

 

Não entendi... primeiro você disse que precisava da posição da substring; agora disse que só precisa saber se ela consta na string.

 

Se precisar da posição, use strpos() mesmo. Se quiser apenas saber se uma substring consta numa string, use strstr() ou stristr(). Veja a Dica do Manual:

 

Dica

 

Do not use preg_match() if you only want to check if one string is contained in another string. Use strpos() or strstr() instead as they will be faster.

Fonte: http://www.php.net/preg_match

 

;)

 

Abraços,

Beraldo

Compartilhar este post


Link para o post
Compartilhar em outros sites

NO caso, usando strstr() eu devo verificar o que?

Tipo: se retornar alguma coisa, é pq existe, se não, é pq n existe?

O que ela retorna se não achar nada? seria null?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ei, tio, tu prestou atenção no que eu disse?

Qdo a strpos encontra a string procurada no início da outra, ela retorna "0" também!

tipo:

<?phpecho strpos("Caramba, onde está?","Caramba");echo strpos("Caramba, onde está?","Uou!");?>
Ambas retornam "0"!

Além do mais, strpos é case-sensitive. Não tem como deixá-la insensitive ou arranjar outra função que faça o que eu quero não?

 

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

 

Caro naofuieu, procure ler o manual que está sendo passado(link na palavra strpos), no manual diz assim:

 

Esta função pode retornar o booleano FALSE, mas também pode retornar um valor não-booleano que pode ser avaliado como FALSE, como 0 ou "". Leia a seção em Booleanos para maiores informações. Utilize o operador === para testar o valor retornado por esta função.

 

Quanto a case-sensitive, pode usar a função stripos

 

observe que nesta função é colocada a mesma observação da função strpos.

 

veja o exemplo postado no manual:

 

<?php

$findme = 'a';

$mystring1 = 'xyz';

$mystring2 = 'ABC';

 

$pos1 = stripos($mystring1, $findme);

$pos2 = stripos($mystring2, $findme);

 

// 'a' certamente não esta em 'xyz'

if ($pos1 === false) {

echo "A string '$findme' não foi encontrada na string '$mystring1'";

}

 

// Note o nosso uso de ===. Simples == não funcionaria como o esperado

// porque a posição de 'a' é 0 (primeiro) caractere.

if ($pos2 !== false) {

echo "Nós encontramos '$findme' em '$mystring2' na posição $pos2";

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caramba, meu povo.Tá bom, eu me rendo. Eu vou usar a strpos mesmo!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

wow.

 

Eu nem me lembrava mais que eu tinha aberto esse tópico.

 

hauheuhauhau

 

Ei, moderador, pode fechar, viu? Eu usei a strpos msm. XD

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.