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:
-
Obieramy wysłany tekst, przypisujemy go zmiennej
$tekst
. -
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. -
Nasz tekst znajduje się teraz w tablicy, więc możemy go wyzerować, przypisując zmiennej
$tekst
łańcuch pusty. -
Jeżeli liczba wyrazów w tablicy
$tekst_a
jest większa od zera, to za pomocą pętliforeach
, bierzemy kolejne wyrazy, usuwamy spacje za pomocą znanej nam funkcjitrim()
i taki "oczyszczony" wyraz dodajemy do tekstu, pamiętając o dodaniu pojedynczej spacji, która oddzieli aktualnie dodawany wyraz od wyrazu następnego. -
Tekst utworzony za pomocą
foreach
posiada na końcu niepotrzebną spację, usuwamy ją za pomocątrim()
. - 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:
-
Definiujemy funkcję zwracającą
true
, jeżeli tekst zawiera szukany wyraz lubfalse
w przypadku przeciwnym. -
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 zwracafalse
. - 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.
-
Obieramy wysłany tekst, przypisujemy go zmiennej
$tekst
. -
Obieramy szukany wyraz, przypisujemy go zmiennej
$szukany
. -
Zerujemy licznik szukanego wyrazu -
$ile
. -
Otwieramy pętlę działającą dopóty, dopóki szukany wyraz
$szukany
znajduje się w tekście$tekst
. -
Jeżeli wyraz znaleziono, to powiększamy licznik
$ile
. -
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). Funkcjastrlen($szukany)
oblicza liczbę znaków wyrazu$szukany
, a więc nasz podłańcuch, zacznie się zaraz za znalezionym wyrazem$szukany
. -
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:
-
Obieramy wysłany tekst, przypisujemy go zmiennej
$tekst
. -
Obieramy wyraz do zamiany, przypisujemy go zmiennej
$stary
. -
Obieramy wyraz który zamieni wyraz do zamiany, przypisujemy go zmiennej
$nowy
. -
Stosujemy funkcję
str_replace()
. - Wyświetlamy zmieniony tekst.
Jeżeli zapomniałeś jak przygotować i gdzie zapisywać pliki testowe: