PHP 언어는 수년 동안 웹 개발자들 사이에서 활발하게 사용되어 왔습니다. 모든 소프트웨어 언어와 마찬가지로 PHP에는 모범 사례와 거의 알려지지 않은 오류/오용이 있습니다. 이번 강의에서는 PHP strpos() 그 기능을 가장 좋은 방법으로 활용하는 방법과 잘 알려지지 않은 정보에 대해 이야기하겠습니다.
사실과 비교하지 마세요
PHP 언어로 strpos() 함수는 검색된 텍스트의 시작 위치를 반환합니다. strpos() 텍스트에서 대상을 찾았는지 검색하다가 해당 기능을 사용하면, 대상을 찾았을 때 1, 찾을 수 없는 경우 0 코드를 반환합니다. 검색된 텍스트의 맨 처음에 대상이 발견된 경우, 0 반환합니다. 이는 엄밀히 말하면 PHP의 버그는 아니지만, 결과적으로 아래 예시와 같이 작성된 if 질의에서 대상 텍스트의 존재 여부를 검색해 보면 대상 텍스트가 시작 부분에 있습니다. 0 를 반환하기 때문에 소프트웨어에 오류가 발생합니다.
예:
$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이 예에서는 else 블록이 작동했습니다. 이건 틀렸어! 예제에서 사용한 텍스트에 "Onur"라는 이름이 언급되어 있기 때문입니다. 이는 다음과 같습니다. strpos() 함수에서 검색된 텍스트가 데이터의 시작 부분에 있으면 함수를 "라고 합니다.0 답을 돌려주는 것입니다. 그렇다면 이 문제를 어떻게 극복할 수 있을까요? 다른 기능을 사용해야 합니까? 아니요. 그럴 필요는 없습니다. 이 문제에 대한 아주 간단한 해결책이 있습니다. 예제를 살펴보고 자세히 살펴보겠습니다.
$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이 예에서는 if 블록의 비교가 올바르게 작동했습니다. 그 이유는 PHP를 포함한 모든 인기 있는 프로그래밍 언어는 물론 소프트웨어 로직까지 0 가치 false, 1 가치 true 으로 간주됩니다. 반환값이 0이므로 if 블록에서 불리언형 비교를 하면 값 0이 false로 처리되어 이런 오류가 발생합니다.
False와 비교할 때는 엄격한 비교를 사용하세요.
이전 예에서 주의해야 할 또 다른 매우 중요한 세부 사항이 있습니다. 엄격한 비교 대신 동등 비교(느슨한 비교)를 하면 동일한 오류가 다시 발생합니다. 동등 비교는 데이터 유형에 대해 의문을 제기하지 않으므로 동등 비교는 데이터 유형에도 의문을 제기합니다. 우리가 말하는 내용에 대한 잘못된 예를 살펴보겠습니다. 동등성 비교 없이 예제를 수행하고 결과를 살펴보겠습니다.
$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대소문자 구분을 관리할 수 있습니다.
strpos() 함수는 기본적으로 대소문자를 구분합니다. 이 민감도를 제거하려면 Stripos() 함수를 사용해야 합니다. 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çiyorstrpos() 함수를 사용하여 검색된 텍스트가 두 번 이상 발생하는지 확인할 수 있습니다.
첫 번째 예:
strpos() 함수를 사용하면 대상 텍스트가 데이터에 몇 번 나타나는지 확인할 수 있습니다. 첫 번째 예에서는 이를 수행하는 창의적이면서도 간단하고 기본적인 방법을 보여줄 것이며, 두 번째 예에서는 훨씬 더 실용적인 최선의 방법을 보여줄 것입니다.
$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두 번째 예:
$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çiyorsubstr_count() 즉, 이 함수는 대상에 하위 텍스트가 몇 개 전달되었는지, 몇 번이나 전달되었는지 계산합니다. 이 기능에 대한 자세한 문서와 예제는 여기에서 찾을 수 있습니다 -> https://www.php.net/manual/function.substr-count.php
strpos()에 대하여
이 기사에서는 strpos() 우리는 해당 기능을 가장 좋은 방법으로 사용하고 가장 일반적인 오용을 수정하는 방법을 배웠습니다. strpos() 그 기능으로 stripos() 및 substr_count() 우리는 또한 그들의 기능을 알게 되었습니다. 최고의 품질 코딩 접근 방식에 대한 나머지 시리즈도 계속 지켜봐 주시기 바랍니다.



