A PHP-stringek pozíciója — strpos

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!


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

Szeretne értesülni, ha új cikk jelenik meg Számtek rovatunkban? Iratkozzon fel értesítőnkre!

E-mailben értesíteni fogjuk Önt az új cikkekről. Feliratkozáshoz kérjük adja meg a nevét és az e-mail címét.

Hozzászólások

Kapcsolódó cikkek

A PHP-stringek pozíciója — strpos
Számtek
  • Erdsoft
  • 2019.09.13.
  • LXXIV. évfolyam 36. szám
A PHP-stringek pozíciója — strpos
Számtek
  • Erdsoft
  • 2019.08.30.
  • LXXIV. évfolyam 35. szám
Facebook

Támogatóink