El lenguaje PHP se ha utilizado activamente entre los desarrolladores web durante muchos años. Como en todos los lenguajes de software, PHP tiene mejores prácticas y errores/usos indebidos poco conocidos. En esta lección PHP strpos() Hablaremos de cómo utilizar su función de la mejor manera e información poco conocida.

No comparar con la verdad

en lenguaje PHP strpos() La función devuelve la posición inicial del texto buscado. strpos() Cuando usamos la función mientras buscamos si el objetivo se encuentra en el texto, cuando se encuentra el objetivo 1, cuando no se encuentra 0 devuelve el código. Si el objetivo se encontró al principio del texto buscado, 0 regresa. Esto no es exactamente un error en PHP, pero como resultado, cuando se busca la presencia del texto de destino en la consulta if escrita como en el ejemplo siguiente, el texto de destino está al principio. 0 Causará un error en el software porque volverá.

Ejemplo:

$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

En el ejemplo, el bloque else funcionó. ¡Esto está mal! Porque el nombre "Onur" se menciona en el texto que utilizamos en el ejemplo. esto es porque strpos() En la función, si el texto buscado está al principio de los datos, la función se llama "0 es devolver la respuesta. Entonces, ¿cómo superamos este problema? ¿Necesitamos utilizar una función diferente? No. No hay necesidad de esto. Hay una solución muy sencilla a este problema. Examinemos el ejemplo y detallemos.

$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

En este ejemplo, la comparación en el bloque if funcionó correctamente. La razón es que todos los lenguajes de programación populares, incluido PHP, e incluso la lógica del software. 0 valor false, 1 valor true es considerado como. Dado que el valor de retorno es 0, cuando se realiza una comparación de tipo booleano en el bloque if, el valor 0 se procesa como falso y se produce este error.

Utilice una comparación estricta al comparar con falso

Hay otro detalle muy importante al que debemos prestar atención en el ejemplo anterior. Si hacemos una comparación de igualdad (comparación flexible) en lugar de una comparación estricta, volveremos a encontrar el mismo error. Dado que la comparación de igualdad no cuestiona el tipo de datos, la comparación de equivalencia también cuestiona el tipo de datos. Examinemos un ejemplo incorrecto de lo que estamos hablando. Hagamos un ejemplo sin comparación de equivalencias y veamos el 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 gestionar la distinción entre mayúsculas y minúsculas

La función strpos() distingue entre mayúsculas y minúsculas de forma predeterminada. Si queremos eliminar esta sensibilidad, debemos usar la función stripos(). Veamos un ejemplo de la función 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 comprobar si el texto buscado aparece más de una vez con la función strpos()

1er ejemplo:

Podemos comprobar cuántas veces aparece el texto de destino en los datos con la función strpos(). En el primer ejemplo, mostraremos la forma creativa pero más sencilla y básica de hacer esto, y en el segundo ejemplo, mostraremos la mejor manera, que es mucho más práctica.

$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

2do ejemplo:

$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() En resumen, la función calcula cuántos subtextos se pasan en el destino y cuántas veces. Puede encontrar documentación detallada y ejemplos de esta función aquí -> https://www.php.net/manual/function.substr-count.php

Acerca de strpos()

En este artículo strpos() Aprendimos a utilizar su función de la mejor manera y corregir el mal uso más común. strpos() con su función stripos() y substr_count() También conocimos sus funciones. Estén atentos al resto de nuestra serie sobre enfoques de codificación de mejor calidad.