Η γλώσσα 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, όταν γίνεται σύγκριση τύπου boole στο μπλοκ if, η τιμή 0 υποβάλλεται σε επεξεργασία ως ψευδής και εμφανίζεται αυτό το σφάλμα.

Χρησιμοποιήστε αυστηρή σύγκριση κατά τη σύγκριση με το ψευδές

Υπάρχει μια άλλη πολύ σημαντική λεπτομέρεια που πρέπει να προσέξουμε στο προηγούμενο παράδειγμα. Αν κάνουμε μια σύγκριση ισότητας (χαλαρή σύγκριση) αντί για αυστηρή σύγκριση, θα συναντήσουμε ξανά το ίδιο σφάλμα. Επειδή η σύγκριση ισότητας δεν αμφισβητεί τον τύπο των δεδομένων, η σύγκριση ισοδυναμίας αμφισβητεί επίσης τον τύπο των δεδομένων. Ας εξετάσουμε ένα λάθος παράδειγμα αυτού για το οποίο μιλάμε. Ας κάνουμε ένα παράδειγμα χωρίς σύγκριση ισοδυναμίας και ας δούμε το αποτέλεσμα

$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çiyor

Μπορούμε να ελέγξουμε αν το αναζητούμενο κείμενο εμφανίζεται περισσότερες από μία φορές με τη συνάρτηση strpos().

1ο παράδειγμα:

Μπορούμε να ελέγξουμε πόσες φορές το κείμενο προορισμού εμφανίζεται στα δεδομένα με τη συνάρτηση strpos(). Στο 1ο παράδειγμα, θα δείξουμε τον δημιουργικό, αλλά πιο απλό και βασικό τρόπο για να το κάνετε αυτό, και στο 2ο παράδειγμα, θα δείξουμε τον καλύτερο τρόπο, ο οποίος είναι πολύ πιο πρακτικός.

$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ο παράδειγμα:

$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() Με λίγα λόγια, η συνάρτηση υπολογίζει πόσα υποκείμενα περνούν στον στόχο και πόσες φορές. Μπορείτε να βρείτε αναλυτική τεκμηρίωση και παραδείγματα αυτής της λειτουργίας εδώ -> https://www.php.net/manual/function.substr-count.php

Σχετικά με το strpos()

Σε αυτό το άρθρο strpos() Μάθαμε πώς να χρησιμοποιούμε τη λειτουργία του με τον καλύτερο τρόπο και να διορθώνουμε την πιο συνηθισμένη κακή χρήση. strpos() με τη λειτουργία του stripos() και substr_count() Γνωρίσαμε επίσης τις λειτουργίες τους. Μείνετε συντονισμένοι για την υπόλοιπη σειρά μας σχετικά με προσεγγίσεις κωδικοποίησης καλύτερης ποιότητας.