Lekcje >> Podstawy PHP
Polimax

Drukarnia w Warszawie realizująca druk wizytówek, plakatów jak również fotoksiążki, fotoobrazy i fotokalendarze - z wysyłką na terenie całego kraju.

Przykłady operacji na łańcuchach

Podczas tych zajęć wykonamy kilka przykładów, związanych z różnymi operacjami na łańcuchach znaków. Należy zaznaczyć, że PHP posiada gotowe funkcje niezbędne do rozwązania większości problemów związanych z łańcuchami.

Ćwiczenie 3_2_0_1. Usuwanie z tekstu wielokrotnych spacji

Zastosuj dwa pliki. W formularzu umieść obszar tekstowy textarea. Będziemy wysyłać dowolne teksty, celowo zawierające wielokrotne spacje, po odebraniu tekstu, tekst będzie przetworzony i wyświetlony w oknie przeglądarki.

W pliku formularz.html

<body>
  <form action="wyniki.php" method="post">
    <textarea name="text_area" cols="50" rows="10">
    </textarea>
    <input type="submit" name="submit"  value="Usuń" />
  </form>
</body>

W pliku wyniki.php

<body>
  <?php
    $tekst=$_POST['text_area'];//1
    $tekst_a=explode(' ',$tekst);//2
    $tekst='';//3
    if (count($tekst_a)>0)//4
    {
      foreach($tekst_a as $wyraz)//4 
      $tekst.=trim($wyraz).' ';//4
      $tekst=trim($tekst);//5
    }
    echo $tekst;//6
  ?> 
</body>

Działanie skryptu:

  1. Obieramy wysłany tekst, przypisujemy go zmiennej $tekst.
  2. Funkcja explode() jest już nam znana. Przy jej pomocy zamieniamy odebrany tekst w tablicę wyrazów. Znakiem rozdzielającym wyrazy jest spacja, jeżeli wystąpi spacja wielokrotna, to między dwiema kolejnymi spacjami znajdzie się pusty łańcuch znaków.
  3. Nasz tekst znajduje się teraz w tablicy, więc możemy go wyzerować, przypisując zmiennej $tekst łańcuch pusty.
  4. Jeżeli liczba wyrazów w tablicy $tekst_a jest większa od zera, to za pomocą pętli foreach, bierzemy kolejne wyrazy, usuwamy spacje za pomocą znanej nam funkcji trim() i taki "oczyszczony" wyraz dodajemy do tekstu, pamiętając o dodaniu pojedynczej spacji, która oddzieli aktualnie dodawany wyraz od wyrazu następnego.
  5. Tekst utworzony za pomocą foreach posiada na końcu niepotrzebną spację, usuwamy ją za pomocą trim().
  6. Wyświetlamy tekst pozbawiony wielokrtotnych spacji.

Ćwiczenie 3_2_0_2. Policzenie ile razy dany wyraz występuje w danym tekście

Zastosuj dwa pliki. W formularzu umieść obszar tekstowy textarea oraz pole tekstowe, w którym będziemy wpisywać szukany wyraz. Po odebraniu tekstu, skrypt policzy ile razy wyraz występuje w tekście i wyświetli w oknie przeglądarki stosowną informację.

W pliku formularz.html

<body>
  <form action="wyniki.php" method="post">
    <textarea name="tekst" cols="50" rows="10"></textarea>
    <input type="text" name="szukany" />
    <input type="submit" name="submit"  value="Oblicz" />
  </form>
</body>

W pliku wyniki.php

<body>
  <?php
    function warunek($tekst,$szukany,&$poz)//1
    {
      $poz=strpos($tekst,$szukany);//2
      return $poz!==false;//3
    }
  
    $tekst=$_POST['tekst'];//4
    $szukany=$_POST['szukany'];//5
    $ile=0;//6
    while (warunek($tekst,$szukany,$poz))//7
    {
      $ile++;//8
      $tekst=substr($tekst,$poz+strlen($szukany));//9
    }
    echo "Liczba znalezionych wyrazów: $ile";//10
  ?> 
</body>

Działanie skryptu:

  1. Definiujemy funkcję zwracającą true, jeżeli tekst zawiera szukany wyraz lub false w przypadku przeciwnym.
  2. Stosujemy funkcję strpos($tekst,$szukany), która znajduje pozycję (liczoną ilością znaków zaczynając od zera), szukanego wyrazu w danym tekście. Jeżeli w tekście nie ma szukanego wyrazu, funkcja zwraca false.
  3. Należy zwrócić uwagę, że jeżeli wyraz wystąpi na początku tekstu, to znaleziona pozycja wyniesie zero, dlatego brak wyrazu musimy sprawdzić co do wartości oraz typu.
  4. Obieramy wysłany tekst, przypisujemy go zmiennej $tekst.
  5. Obieramy szukany wyraz, przypisujemy go zmiennej $szukany.
  6. Zerujemy licznik szukanego wyrazu - $ile.
  7. Otwieramy pętlę działającą dopóty, dopóki szukany wyraz $szukany znajduje się w tekście $tekst.
  8. Jeżeli wyraz znaleziono, to powiększamy licznik $ile.
  9. Wyraz raz znaleziony, nie może być brany pod uwagę w następnych wyszukiwaniach, więc do następnego szukania bierzemy tekst zaczynający zaraz za znalezionym wyrazem. Taki tekst możemy otrzymać za pomocą funkcji $tekst=substr($tekst,$poz+strlen($szukany)). Otrzymujemy podłańcuch (sub string). Funkcja strlen($szukany) oblicza liczbę znaków wyrazu $szukany, a więc nasz podłańcuch, zacznie się zaraz za znalezionym wyrazem $szukany.
  10. Wyświetlamy liczbę znalezionych wyrazów. Zastosowanie cudzysłowów spowoduje zinterpretowanie zmiennej $ile, jako zmiennej i wyświetlenie jej wartości.

Ćwiczenie 3_2_0_3. Zamienić wyrazy występujące w danym tekście na inne wyrazy

Zastosuj dwa pliki. W formularzu umieść obszar tekstowy textarea oraz dwa pole tekstowe, w których będziemy wpisywać wyraz do zamiany oraz nowy wyraz. Po odebraniu tekstu, skrypt zamieni wszystkie "stare" wyrazy na wyrazy "nowe" i wyświetli w oknie przeglądarki zmieniony tekst. Oczywiście wyraz jest tutaj pojęciem umownym, mówiąc ściślej należałoby określić łacuchy - obecne (do zamiany) oraz nowe (zamieniające istniejące). Zadanie to wykona jedna funkcja wbudowana str_replace($wyraz_do_zamiany,$nowy_wyraz,$tekst).

W pliku formularz.html

<body>
  <form action="wyniki.php" method="post">
    <textarea name="tekst" cols="50" rows="10"></textarea><br /><br />
    tekst do zamiany<input type="text" name="stary" /><br /><br />
    tekst nowy<input type="text" name="nowy" /><br /><br />
    <input type="submit" name="submit"  value="Zamień" />
  </form>
</body>

W pliku wyniki.php

<body>
  <?php
    $tekst=$_POST['tekst'];//1
    $stary=$_POST['stary'];//2
    $nowy=$_POST['nowy'];//3
    $tekst=str_replace($stary,$nowy,$tekst);//4
    echo $tekst;//5
  ?> 
</body>

Działanie skryptu:

  1. Obieramy wysłany tekst, przypisujemy go zmiennej $tekst.
  2. Obieramy wyraz do zamiany, przypisujemy go zmiennej $stary.
  3. Obieramy wyraz który zamieni wyraz do zamiany, przypisujemy go zmiennej $nowy.
  4. Stosujemy funkcję str_replace().
  5. Wyświetlamy zmieniony tekst.

Jeżeli zapomniałeś jak przygotować i gdzie zapisywać pliki testowe: