Új témakörünk első leckéje a stringek pozíciójával, azaz a strpos funkcióval foglalkozik. Elsőre talán furcsának tűnhet a funkció neve, de ha a string position angol kifejezésre gondolsz, észreveheted, hogy a két szó három-három betűjéből tevődik össze a név.
A PHP-programozói karriered során nagyon fontos lesz, hogy jól tudj bánni a stringekkel. Minden bizonnyal elő fog fordulni, hogy olyan programozói problémával találod szemben magad, amely megköveteli, hogy kikeress bizonyos adatokat egy stringből. A stringekkel kapcsolatos leendő szakértelmed alapköve a strpos funkció, mely lehetővé teszi, hogy megtaláld az adatokat a stringben.
A stringekben való keresés
A strpos funkció két paraméterrel működik — az első a string, melyben keresni szeretnénk, a második pedig az a string, amelyet keresünk. Ha a funkció találatra bukkan, az első találat pozícióját írja ki. Ha nincs találat, akkor a funkció eredménye hamis.
Hogy teljesen világos legyen, hogyan fest ez a gyakorlatban, vegyünk egy rendezett, számozott stringet, és keressünk rá az 5-ös számra.
PHP-kód:
$numbered_string = '1234567890'; // 10 numbers 1 to 0
$five_pos = strpos($numbered_string, '5');
echo 'Az 5 helyzete a stringben ' . $fivePos;
Megjelenítés a böngészőben:
Az 5 helyzete a stringben 4
Megfigyelhetted, hogy ez egy kicsit furcsa — joggal kérdezheted, hogy miért 4 a helyzet, azaz a pozíció. Nos azért, mert a PHP 0-tól kezdi a számolást.
1 szám – 0. pozíció – Nincs találat
2 szám – 1. pozíció – Nincs találat
3 szám – 2. pozíció – Nincs találat
4 szám – 3. pozíció – Nincs találat
5 szám – 4. pozíció – Találat
Egyszerű kis példánkban csak egyetlen karaktert kerestünk, de ennek a funkciónak a segítségével bármilyen karakterszámú stringre rákereshetünk. Fontos megjegyezni, hogy ez a funkció az első találat kezdetének a helyzetét írja ki. Vagyis ha a fenti stringben az „567890” stringre kerestünk volna rá, megint a 4. pozíción bukkantunk volna találatra, mert itt kezdődik az egyezés.
A strpos funkció egyik hátránya, hogy csak a legelső egyezés helyzetét írja ki. Ha 5000 másik találat is van, arról nem fogunk tudni, ha csak erre a módszerre hagyatkozunk!
Létezik egy harmadik (opcionális) paraméter is, mely lehetővé teszi, hogy pontosan meghatározzuk, hol kezdje a strpos funkció a keresést. Ha megjegyezzük az utolsó egyezés helyzetét, és ehhez hozzáadunk egyet, a funkció átugorja az első egyezést, és a következőre ugrik.
PHP-kód:
$numbered_string = '1234567890123456789012345678901234567890';
$five_pos = strpos($numbered_string, '5');
echo 'Az 5 helyzete a stringben ' . $five_pos;
$five_pos2 = strpos($numbered_string, '5', $five_pos + 1);
echo '<br />A második 5 helyzete a stringben ' . $five_pos2;
Megjelenítés a böngészőben:
Az 5 helyzete a stringben 4
A második 5 helyzete a stringben 14
Azzal, hogy fogtuk az első találat helyzetét (4), és hozzáadtunk egyet, arra utasítottuk a strpos funkciót, hogy az első találat után kezdje a keresést. A kód második részének kivitelezése során a funkció valójában a 6789012345... stringben keresett, és ezzel lehetővé tette, hogy megtaláljuk a string második 5-ösét is.
Lépjünk vissza néhány leckét, és idézzük fel a PHP while loopról tanultakat. Emlékszel? Ha igen, akkor elég, ha hozzáadsz néhány sort a kódhoz, és megkeresheted az összes 5-öst a numbered_string megnevezésű példastringünkben.
PHP-kód:
$numbered_string = '1234567890123456789012345678901234567890';
$offset = 0; // initial offset is 0
$five_counter = 0;
// Először leellenőrizzük, van-e "5" a 0 pozíción.
if (strpos($numbered_string, '5') == 0) {
$five_counter++;
echo '<br />A #' . $five_counter . ' ötös a következő pozíción van - 0';
}
// Az 5-ösök keresése a string többi részében
while ($offset = strpos($numbered_string, '5', $offset + 1)) {
$five_counter++;
echo '<br />A #' . $five_counter . ' ötös a következő pozíción van - ' . $offset;
}
Megjelenítés a böngészőben:
A #1 ötös a következő pozíción van – 4
A #2 ötös a következő pozíción van – 14
A #3 ötös a következő pozíción van – 24
A #4 ötös a következő pozíción van – 34
A feltételes állítás a while loopban egy kicsit ijesztőnek tűnhet, de ha részekre bontjuk, sokkal érthetőbb.
- $offset = strpos($numbered_string, '5', $offset + 1) — ez a PHP while loop feltételes állítása. Ha hamis, a loop leáll. Ez a feltételes állítás minden alkalommal lefut.
- strpos($numbered_string, '5', $offset + 1) — ez ugyanaz a kód, amelyet az előző példánkban is használtunk. Rákeresünk az 5-ös számra a numbered_string megnevezésű stringünkben, és az utolsó találat értékét (amelyet a $offset változóban tárolunk) növeljük eggyel, hogy átugorjuk az utolsó találatot. Az első olyan $offset érték, amelyet használunk, 0, tehát a string elejéről indulunk.
- $offset = strpos(... — fogjuk a pozíciót, amelyet a strpos funkció írt ki, és tároljuk az $offset változóban, hogy ezt a találatot át tudjuk ugrani legközelebb, amikor a while loop lefut a kódon. Ha a strpos nem talál találatot, ez az érték hamis lesz, aminek következtében a while loop nem fut tovább.
Jó gyakorlást!
A PHP-stringek pozíciója — strpos
Ma egy nagy leckecsoportba vágunk bele — a PHP-stringekkel fogunk közelebbről is megismerkedni. Új témakörünk első leckéje a stringek pozíciójával, azaz a strpos funkcióval foglalkozik. Elsőre talán furcsának tűnhet a funkció neve, de ha a string position angol kifejezésre gondolsz, észreveheted, hogy a két szó három-három betűjéből tevődik össze a név.
A PHP-programozói karriered során nagyon fontos lesz, hogy jól tudj bánni a stringekkel. Minden bizonnyal elő fog fordulni, hogy olyan programozói problémával találod szemben magad, amely megköveteli, hogy kikeress bizonyos adatokat egy stringből. A stringekkel kapcsolatos leendő szakértelmed alapköve a strpos funkció, mely lehetővé teszi, hogy megtaláld az adatokat a stringben.
A stringekben való keresés
A strpos funkció két paraméterrel működik — az első a string, melyben keresni szeretnénk, a második pedig az a string, amelyet keresünk. Ha a funkció találatra bukkan, az első találat pozícióját írja ki. Ha nincs találat, akkor a funkció eredménye hamis.
Hogy teljesen világos legyen, hogyan fest ez a gyakorlatban, vegyünk egy rendezett, számozott stringet, és keressünk rá az 5-ös számra.
PHP-kód:
$numbered_string = '1234567890'; // 10 numbers 1 to 0
$five_pos = strpos($numbered_string, '5');
echo 'Az 5 helyzete a stringben ' . $fivePos;
Megjelenítés a böngészőben:
Az 5 helyzete a stringben 4
Megfigyelhetted, hogy ez egy kicsit furcsa — joggal kérdezheted, hogy miért 4 a helyzet, azaz a pozíció. Nos azért, mert a PHP 0-tól kezdi a számolást.
1 szám – 0. pozíció – Nincs találat
2 szám – 1. pozíció – Nincs találat
3 szám – 2. pozíció – Nincs találat
4 szám – 3. pozíció – Nincs találat
5 szám – 4. pozíció – Találat
Egyszerű kis példánkban csak egyetlen karaktert kerestünk, de ennek a funkciónak a segítségével bármilyen karakterszámú stringre rákereshetünk. Fontos megjegyezni, hogy ez a funkció az első találat kezdetének a helyzetét írja ki. Vagyis ha a fenti stringben az „567890” stringre kerestünk volna rá, megint a 4. pozíción bukkantunk volna találatra, mert itt kezdődik az egyezés.
A strpos funkció egyik hátránya, hogy csak a legelső egyezés helyzetét írja ki. Ha 5000 másik találat is van, arról nem fogunk tudni, ha csak erre a módszerre hagyatkozunk!
Létezik egy harmadik (opcionális) paraméter is, mely lehetővé teszi, hogy pontosan meghatározzuk, hol kezdje a strpos funkció a keresést. Ha megjegyezzük az utolsó egyezés helyzetét, és ehhez hozzáadunk egyet, a funkció átugorja az első egyezést, és a következőre ugrik.
PHP-kód:
$numbered_string = '1234567890123456789012345678901234567890';
$five_pos = strpos($numbered_string, '5');
echo 'Az 5 helyzete a stringben ' . $five_pos;
$five_pos2 = strpos($numbered_string, '5', $five_pos + 1);
echo '<br />A második 5 helyzete a stringben ' . $five_pos2;
Megjelenítés a böngészőben:
Az 5 helyzete a stringben 4
A második 5 helyzete a stringben 14
Azzal, hogy fogtuk az első találat helyzetét (4), és hozzáadtunk egyet, arra utasítottuk a strpos funkciót, hogy az első találat után kezdje a keresést. A kód második részének kivitelezése során a funkció valójában a 6789012345... stringben keresett, és ezzel lehetővé tette, hogy megtaláljuk a string második 5-ösét is.
Lépjünk vissza néhány leckét, és idézzük fel a PHP while loopról tanultakat. Emlékszel? Ha igen, akkor elég, ha hozzáadsz néhány sort a kódhoz, és megkeresheted az összes 5-öst a numbered_string megnevezésű példastringünkben.
PHP-kód:
$numbered_string = '1234567890123456789012345678901234567890';
$offset = 0; // initial offset is 0
$five_counter = 0;
// Először leellenőrizzük, van-e "5" a 0 pozíción.
if (strpos($numbered_string, '5') == 0) {
$five_counter++;
echo '<br />A #' . $five_counter . ' ötös a következő pozíción van - 0';
}
// Az 5-ösök keresése a string többi részében
while ($offset = strpos($numbered_string, '5', $offset + 1)) {
$five_counter++;
echo '<br />A #' . $five_counter . ' ötös a következő pozíción van - ' . $offset;
}
Megjelenítés a böngészőben:
A #1 ötös a következő pozíción van – 4
A #2 ötös a következő pozíción van – 14
A #3 ötös a következő pozíción van – 24
A #4 ötös a következő pozíción van – 34
A feltételes állítás a while loopban egy kicsit ijesztőnek tűnhet, de ha részekre bontjuk, sokkal érthetőbb.
- $offset = strpos($numbered_string, '5', $offset + 1) — ez a PHP while loop feltételes állítása. Ha hamis, a loop leáll. Ez a feltételes állítás minden alkalommal lefut.
- strpos($numbered_string, '5', $offset + 1) — ez ugyanaz a kód, amelyet az előző példánkban is használtunk. Rákeresünk az 5-ös számra a numbered_string megnevezésű stringünkben, és az utolsó találat értékét (amelyet a $offset változóban tárolunk) növeljük eggyel, hogy átugorjuk az utolsó találatot. Az első olyan $offset érték, amelyet használunk, 0, tehát a string elejéről indulunk.
- $offset = strpos(... — fogjuk a pozíciót, amelyet a strpos funkció írt ki, és tároljuk az $offset változóban, hogy ezt a találatot át tudjuk ugrani legközelebb, amikor a while loop lefut a kódon. Ha a strpos nem talál találatot, ez az érték hamis lesz, aminek következtében a while loop nem fut tovább.
Jó gyakorlást!
NYEREMÉNYJÁTÉK
Rovatunk elsődleges célja, hogy közelebbről is bemutassa a legismertebb webtechnológiákat. Azok között az olvasók között, akik minden héten követik rovatunkat, azaz velünk tanulják a programozás alapjait és kitöltik a feladatsort, a sorozat végén egy laptopot sorsolunk ki.
A játék heti kérdése
Mit kell megadnunk a strpos funkció második paramétereként?
1. A stringet, melyet keresünk
2. A stringet, melyben keresni szeretnénk
3. A keresés kezdőpozícióját
Néhány szó rólunk:
Az ErdSoft (www.erdsoft.com) 2011-ben alakult meg. Csapatunkat a fiatalos lendület, a szakértelem, a folyamatos tanulás és tapasztalatgyűjtés jellemzi. Ügyfeleinknek igyekszünk teljes körű szolgáltatást nyújtani — bátran fordulhatnak hozzánk, legyen szó webfejlesztésről, alkalmazásokról, SEO-optimalizálásról, grafikai tervezésről, marketingről vagy szövegírásról. Csapatunk sikerét mi sem bizonyítja jobban, mint a