Kezdőoldal » Számítástechnika » Programozás » Php-ban mit lehet x helyére...

Php-ban mit lehet x helyére írni, hogy ez igaz legyen? If(x == "999"){...}

Figyelt kérdés
Például ha x valamféle Wildcard (*) karakter. Létezik ilyesmi vajon? Köszi előre is az ötleteket

2021. nov. 12. 23:45
 1/8 anonim ***** válasza:
0%
Mi bajod van? Ez a feltétel akkor fut le, ha az x=999. Ezen mit kell magyarázni vagy mit nem értesz rajta?
2021. nov. 12. 23:49
Hasznos számodra ez a válasz?
 2/8 anonim ***** válasza:
0%
#1: Pontosabban akkor, ha x = 999, vagy akkor, ha x = "999". ;)
2021. nov. 12. 23:55
Hasznos számodra ez a válasz?
 3/8 anonim ***** válasza:
80%

Végtelen sok lehetőség van, ezekből néhány:


true

"999"

999

true || "555"

1000-1

(1 << 10) - 25

992 | 7

2021. nov. 13. 00:06
Hasznos számodra ez a válasz?
 4/8 A kérdező kommentje:
Köszönöm :-)
2021. nov. 13. 00:14
 5/8 anonim ***** válasza:
67%

Arra gondolsz, hogy $x nemcsak számokat tartalmazhat, hanem wildcard mintákat is, és pl ha x-nek az a tartalma, hogy csillag, akkor is teljesüljön a feltétel, meg akkor is, ha x épp 999, sőt akkor is, ha x mondjuk az, hogy 9?9, de mondjuk akkor ne, ha x 567?


Szóval ilyesfajta intelligens, patternekkel kiegészített összehasonlító művelet?



Akkor azt úgy lehet megoldani, hogy az if feltételben az szerepelne, hogy (példák):


if (preg_match('/.*/', 999)) {...} ----> lefutása: IGEN

if (preg_match('/9.9/', 999)) {...} ----> lefutása: IGEN

if (preg_match('/9.5/', 999)) {...} ----> lefutása: NEM


Ha az ember egyszerűbb wildcardokat akar használni regexpek helyett, akkor ehhez egy, az egyéni kis wildcard-nyelvből a regexpek nyelvére ,,fordító'' kis segédalgoritmust kell írni:


function wildcardToRegexp($wildcard): string {$rawRegexp = str_replace(['/\\?/', '/\\*/'], ['.', '.*']); return "/$rawRegexp/";}


A fordítás példái:


wildcardToRegexp('*') -----> '/.*/'

wildcardToRegexp('9?9') ---> '/9.9/'

wildcardToRegexp('999') ---> '/999/'

wildcardToRegexp(999) ----> '/999='


És ezt felhasználva működhetne is a dolog:


function compareWildcard($wildcard, $value): bool {return preg_match(wildcardToRegexp($wildcard), $value) > 0;}


A példák erre az összerakott működésre:


compareWildcard(999, 999) ---> eredménye true

compareWildcard('999', 999) ---> eredménye true

compareWildcard('*', 999) ---> eredménye true

compareWildcard('9?9', 999) ---> eredménye true

compareWildcard('9?5', 999) ---> eredménye false

compareWildcard('9??', 999) ---> eredménye true

compareWildcard('??9', 999) ---> eredménye true

compareWildcard('??2', 999) ---> eredménye false

compareWildcard('???', 999) ---> eredménye true

compareWildcard('*', 999) ---> eredménye true


így össze is lehet rakni a dolgokat:


if (compareWildcard('999', 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard(999, 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard('*', 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard('9?9', 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard('9?5', 999) {} ----> nem fut le, mert a feltétel nem teljesül

if (compareWildcard('9??', 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard('??9', 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard('??2', 999) {} ----> nem fut le, mert a feltétel nem teljesül

if (compareWildcard('???', 999) {} ----> lefut, mert a feltétel teljesül

if (compareWildcard('*', 999) {} ----> lefut, mert a feltétel teljesül


Ilyesfajta mintázatos segédfüggvényeket én akkor szoktam használni, ha pl. egy saját egyéni mini kis webalkalmazás-keretrendszerhez routert készítek.

2021. nov. 13. 08:30
Hasznos számodra ez a válasz?
 6/8 anonim ***** válasza:

A kis hibákat, elgépeléseket javítom, és íme a segédfüggvények, és a teszt is a végén:


<?php


function wildcardToRegexp($wildcard): string {$rawRegexp = str_replace(['?', '*'], ['.', '.*'], $wildcard); return "/$rawRegexp/";}

function compareWildcard($wildcard, $value): bool {return preg_match(wildcardToRegexp($wildcard), $value) > 0;}


echo [

compareWildcard(999, 999),

compareWildcard('999', 999),

compareWildcard('*', 999),

compareWildcard('9?9', 999),

compareWildcard('9?5', 999),

compareWildcard('9??', 999),

compareWildcard('??9', 999),

compareWildcard('??2', 999),

compareWildcard('???', 999),

compareWildcard('*', 999)

] == [

true,

true,

true,

true,

false,

true,

true,

false,

true,

true

];

2021. nov. 13. 08:52
Hasznos számodra ez a válasz?
 7/8 A kérdező kommentje:
köszi, igen ilyesmit kerestem, koszi a segitseget tenyleg :-))
2021. nov. 14. 11:32
 8/8 anonim ***** válasza:

Szívesen, örülök, hogy tényleg ilyesmi lett.


Két munkában nem használtunk szabványos webkeretrendszert, hanem saját kis keretrendszert kellett írnunk, és ott a route-ok feldolgozásánál merültek fel hasonló dolgok: afféle kis beágyazott mininyelveket próbáltunk kitalálni. Aztán persze ezeket regexp-es segédfüggvényekkel valósítottuk meg meg dolgoztuk fel.


[

'/student/([0-9]+)' => [

'GET' => [StudentController::class, 'show', ['intval'] ],

'POST' => [StudentController::class54, 'update', ['intval'] ]

],

...

...

'/doc/([a-z\-]+)' => [

'GET' => [HomeController::class, 'doc', ['strval'] ]

],

...

...

]


Sok sikert kívánok a projektedhez!

2021. nov. 15. 02:50
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!