A linguagem PHP tem sido usada ativamente entre desenvolvedores web há muitos anos. Como em toda linguagem de software, o PHP possui práticas recomendadas e erros/usos indevidos pouco conhecidos. Nesta lição PHP strpos() Falaremos sobre como utilizar sua função da melhor forma e informações pouco conhecidas.

Não compare com o verdadeiro

em linguagem PHP strpos() função retorna a posição inicial do texto pesquisado. strpos() Quando usamos a função ao pesquisar se o alvo é encontrado no texto, quando o alvo é encontrado 1, quando não encontrado 0 retorna o código. Se o alvo foi encontrado logo no início do texto pesquisado, 0 retorna. Isso não é exatamente um bug no PHP, mas como resultado, quando a presença do texto alvo é pesquisada na consulta if escrita como no exemplo abaixo, o texto alvo está no início. 0 Isso causará um erro no software porque retornará .

Exemplo:

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) === true) {
    echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyor

No exemplo, o bloco else funcionou. Isso está errado! Porque o nome "Onur" é mencionado no texto que usamos no exemplo. Isto é porque strpos() Na função, se o texto pesquisado estiver no início dos dados, a função é chamada "0 é retornar a resposta. Então, como podemos superar esse problema? Precisamos usar uma função diferente? Não. Não há necessidade disso. Existe uma solução muito simples para este problema. Vamos examinar o exemplo e detalhá-lo.

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) !== false) { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçiyor";
} else {
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyor

Neste exemplo, a comparação no bloco if funcionou corretamente. A razão é que todas as linguagens de programação populares, incluindo PHP, e até lógica de software 0 valor false, 1 valor true é considerado como. Como o valor de retorno é 0, quando uma comparação do tipo booleano é feita no bloco if, o valor 0 é processado como falso e este erro ocorre.

Use comparação estrita ao comparar com falso

Há outro detalhe muito importante que precisamos prestar atenção no exemplo anterior. Se fizermos uma comparação de igualdade (comparação vaga) em vez de uma comparação estrita, encontraremos novamente o mesmo erro. Como a comparação de igualdade não questiona o tipo de dados, a comparação de equivalência também questiona o tipo de dados. Vamos examinar um exemplo incorreto do que estamos falando. Vamos fazer um exemplo sem comparação de equivalência e ver o resultado

$data = "Onur Özden Web Çözümleri";
$search = "Onur";

if (strpos($data, $search) != false) {
    echo "Metinde '{$search}' ifadesi geçiyor";
} else { // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçmiyor

Podemos gerenciar a sensibilidade a maiúsculas e minúsculas

A função strpos() diferencia maiúsculas de minúsculas por padrão. Se quisermos remover essa sensibilidade, devemos usar a função stripos(). Vejamos um exemplo da função stripos():

$data = "Onur Özden Web Çözümleri";
$search = "onur";

if (stripos($data, $search) !== false) {  // Bu blok çalışacak
    echo "Metinde '{$search}' ifadesi geçiyor";
} else {
    echo "Metinde '{$search}' ifadesi geçmiyor";
}
// Çıktı: Metinde 'Onur' ifadesi geçiyor

Podemos verificar se o texto pesquisado ocorre mais de uma vez com a função strpos()

1º exemplo:

Podemos verificar quantas vezes o texto alvo aparece nos dados com a função strpos(). No 1º exemplo mostraremos a forma criativa, porém mais simples e básica de fazer isso, e no 2º exemplo mostraremos a melhor forma, que é muito mais prática.

$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";

// undefined hatası almamak için değişkenleri tanımla ve varsayılan olarak 0 değerini ver;
$position = 0;
$count = 0;

while (($position = strpos($data, $search, $position)) !== false) {
    $count++; // Kaçıncı kez geçtiğini say
    $position++; // Sonraki arama için pozisyonu artır

}

// Sonucu yazdır
echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor<br>";

// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyor

2º exemplo:

$data = "Onur Özden Web Çözümleri, Onur Özden tarafından kurulmuştur. Onur Özden ve ekibi ile web yazılım geliştirme, wordpress teknik destek ve seo hizmetleri sunar.";
$search = "Onur";

// substr_count fonksiyonu ile $search ifadesinin $data içindeki toplam sayısını hesapla
$count = substr_count($data, $search);

// veri içerisinde hedef kelime geçmiyorsa "0 adet geçiyor" gibi anlamsız bir ifade çıktılanmaması için koşul
if ($count > 0) { // veride hedef ifade geçtiği için bu blok çalışacak
    echo "Veri içerisinde toplam {$count} adet '{$search}' kelimesi geçiyor";
} else {
    echo "Veri içerisinde '{$search}' kelimesi geçmiyor.";
}
// Çıktı: Veri içerisinde toplam 3 adet 'Onur' kelimesi geçiyor

substr_count() Resumindo, a função calcula quantos subtextos são passados no alvo e quantas vezes. Você pode encontrar documentação detalhada e exemplos desta função aqui -> https://www.php.net/manual/function.substr-count.php

Sobre strpos()

Neste artigo strpos() Aprendemos como utilizar sua função da melhor forma e corrigir os usos indevidos mais comuns. strpos() com sua função stripos() E substr_count() Também conhecemos suas funções. Fique ligado no restante de nossa série sobre abordagens de codificação da melhor qualidade.