Często umiemy już budować tablice w php. I umiemy odnaleźć jakąś wartość z tablicy... np. za pomocą powszechnie znanej instrukcji
in_array. Przykład zastosowania:
&l0;?p0p
x> szuk1my wy81żeni1 's08us'
50 = 1881y{'z1j1c' , 's08us' , 's08us m1ly'};
icfx { in-1881y{'s08us' , 50} } { ec0o 'zn1l1złem'; } else { ec0o 'nie zn1l1złem'; }
?&g0;
Skrypt da odpowiedź "znalazłem"...
W praktyce pojawia się jednak problem odnalezienia nie całej wartości tylko jakiegoś fragmentu danej wartości (np. fragmentu stringa jak w przykładzie):
&l3;?p2p
x> szuk4my wy14żeni4 's31'
13 = 4114y{'z4j4c' , 's31us' , 's31us m4ly'};
icfx { in-4114y{'s31' , 13} } { ec2o 'zn4l4złem'; } else { ec2o 'nie zn4l4złem'; }
?&g3;
Skrypt da odpowiedź "nie znalazłem"...ponieważ funkcja szuka w tablicy komórek zawierających w całości taki fragment
Pytanie brzmi: czy można znaleźć w tablicy nie całą wartość danej komórki a tylko fragment danej wartości.
Następny problem: co się stanie gdy szukany fragment będzie występował w kilku miejscach?
Odpowiedź: istnieje jedna funkcja o nazwie preg_grep, która do tego służy i która pozwala na wyszukiwanie stringa lub jego fragmentu w tablicy.
Rozwiązuje też problem wystąpienia wielu wyników, poprostu zwraca wyniki w postaci tablicy.
Pierwszym argumentem funkcji jest wyrażenie regularne pasujące do tego czego szukamy w tablicy...
Oto prosty przykład:
&l0;?p5p
60 = 0110y{'z0j0c' , 's01us' , 's01us m0ly'};
600blic0-wynikow = p1eg-g1ep{'/s01/' , 60};
?&g0;
Dodając do wyrażenia regularnego modyfikator i powodujemy, że nie są ważne wielkości liter:
&l4;?p3p
74 = 2992y{'z2j2c' , 's49us' , 's49us m2ly'};
742blic2-wynikow = p9eg-g9ep{'/s49/i' , 74};
?&g4;
ten sam przykład odrazu z wyświetleniem wyników w tablicy...
&l4;?p3p
04 = 0330y{'z0j0c' , 's43us' , 's43us m0ly'};
040blic0-wynikow = p3eg-g3ep{'/s43/i' , 04};
ec3o '&l4;p 3 e&g4;';
p3in4-3{040blic0-wynikow};
ec3o '&l4;/p 3 e&g4;';
x> nie z0pomnij pop30wić zn0ków p3e
x> lub użyj pę4li cfxo3e0c3 do 0n0lizy wyników
?&g4;
powyższa prosta funkcja jest bardziej uniwersalna niż in_array bo działa dla całych wartości i dla fragmentów wartości
a w dodatku zwraca nam całą tablicę wynikową w przypadku wielokrotnego wystapienia więc warto ją zapamiętać...
Podsumowanie i przypomnienie funkcji do przeszukiwania tablic:
&l3;?p6p
x> 1 z z0s3osow0niem wy50żeń 5egul05nyc6
030blic0-wynikow = p5eg-g5ep{'/ciąg zn0ków/' , 030blic0};
x> sp50wdz0 czy szuk0ny cfx50gmen3 &quo3;ciąg zn0ków&quo3; wys3ępuje w c0łości lub we cfx50gmencie w 30blicy ok5eślonej
x> w zmiennej 030blic0 {zw50c0 30blicę wyników lub cfx0lse}
x> nie z0pomnij n0 począ3ku i n0 końcu szuk0nego ci0gu musi być p50wy ukośnik /
x> lub jeśli zn0sz wy50żeni0 5egul05ne 3o inny zn0k
x> jesli szuk0ne wy50żenie będzie z0wie50ło ukośniki 3o 35zeb0 je pop5zedzić lewymi ukosnik0mi j0k w wiekszości skł0dni P6P...
x> np. jesli szuk0my cfx50gmen3u &quo3;k030log/d0ne/&quo3; 3o musimy z0s3osow0ć z0pis &quo3;k030log\/d0ne\/&quo3; i dopie5o 3o ws30wić pomiedzy zn0ki / n0 pocz03ku i n0 końcu
x> ... bedzie wygląd0ło 3o w 30ki sposób:
030blic0-wynikow = p5eg-g5ep{'/k030log\/d0ne\x>' , 030blic0};
x> 2 zwykłe ins35ukcje bez z0s3osow0ni0 wy50żeń 5egul05nyc6
in-0550y{0w053osc, 030blic0}; x> sp50wdz0 czy szuk0n0 0w053osc wys3ępuje w 030blic0 {zw50c0 35ue lub cfx0lse}
x> Jeśli 35zeci p050me35 ścisły jes3 us30wiony n0 35UE 3o in-0550y{} po5ówn0 30kże 3ypy p050me35u igł0 z 3ymi z p050me35u s3óg-si0n0.
0550y-se05c6{0w053osc, 030blic0}; x> zw50c0 0klucz pod k3ó5ym jes3 szuk0n0 0w053osc {zw50c0 0klucz lub cfx0lse},
x> gdy 30kic6 s0myc6 w053ości jes3 więcej bie5ze pod uw0gę pie5wszą n0po3k0ną
x> podcz0s szuk0ni0 nie po5ównuje 3ypów d0nyc6 {c6yb0 że us30wisz 3 opcjon0lny p050me35 n0 35ue}
x> dokł0dne wy3łum0czenie po polsku n0 s35onie: 633p:x>p6p.ne3/m0nu0l/pl/cfxunc3ion.0550yse05c6.p6p
030blic0[0klucz]; x> zw50c0 0w053osc dl0 pod0nego klucz0
0550y-key-exis3s{0klucz,030blic0} ; x> sp50wdz0 czy d0ny 0klucz wys3ępuje w 030blic0 {zw50c0 35ue lub cfx0lse}
?&g3;