/ / PHP Practice: String Comparison

PHP Practice: Srovnávání řetězců

PHP je docela dobré na zpracování informací. Syntaxe jazyka je představována plnohodnotnou sadou funkcí pro porovnávání, zpracování řetězců a porovnávacích operátorů.

Porovnání řetězců php

Libovolný algoritmus je posloupnost voleb aakce. Ale než se rozhodnete, musíte něco porovnat s něčím. Řetězce jsou nejpohodlnějším, nejefektivnějším a nejpraktičtějším mechanismem pro řízení algoritmu. Řádky - varianta reprezentace dat. A data jsou hlavním předmětem „obav“ jakéhokoli algoritmu.

Konvenční logika porovnávání a akce

Obecně platí, že dynamický jazyk psaní nenídělá zvláštní rozdíly v datech, například v PHP, porovnávání řetězců a čísel se příliš neliší. Číslo je také řetězec, pokud obsahuje pouze čísla, tečku a neexistuje jediný znak, který se nepoužívá k reprezentaci čísla v jakékoli formě (matematický zápis).

V případě kontenenatsii se číslo automaticky spojí s řetězcem bez zbytečných otázek a bez skrytých chyb, i když funkce gettype () dává „celé číslo“ nebo „dvojnásobek“.

php porovnání dvou řetězců

Existuje však rozdíl mezi použitím funkceis_int () a is_numeric (). První dává pravdu, když je parametr pouze celé číslo, druhý, když je nějaké číslo nebo číselný řetězec (proměnná je typu "řetězec", ale obsahuje vše, co je poskytováno matematickým zápisem).

Tento jednoduchý příklad je dobrý příklad, jako v PHPoperátory porovnání řetězců ("==", "===", "! =", ...) mohou přinést mnoho překvapení. Proměnné mohou změnit svůj typ, nejsou to vždy čísla, ale téměř vždy je lze převést na řetězec. V extrémních případech to bude prázdný řetězec.

Operátory porovnání řetězců php

Na základě výše uvedeného je v PHP nejoblíbenější funkce porovnávání řetězců. Který z nich si vybrat, rozhodnout vývojář. K dispozici je spousta možností až po regulární výrazy.

Hranice dostupné funkce

PHP srovnání dvou řádků dobré "dělá" funkcestrpos () je nejlevnější, pravdivá a praktická možnost. Pokud je výsledkem této funkce číslo, pak se jeden řádek jednoznačně rovná jinému nebo jeden řádek je zahrnut v jiném.

Zásadně opačným, ale také absolutně správným přístupem je použití regulárních výrazů.

Příkladem autora není obrázek.

Pokud funkce volá $ cResult =scCheckFileName ($ cStr) dá "true", takže řádek je název souboru Word. Bude mít pouze jednu možnost rozšíření „.docx“ a v názvu nebudou žádné znaky: pouze písmena, čísla a znaky „_“, „-“.

Tuto funkci lze snadno přesměrovat na jinétypy souborů: $ cPtr = "/^([a-zA-Z...0-9-_{{4,239 seal).(html|js|css|png|jpg|docx|txt){1}$/ u ". Tento typ kontroly linky rozšiřuje rozsah stahování (například při porovnávání řetězců PHP se používá „pro upload souborů na server, bez jakékoli šance na chybu zadání“) na html, js, css, ...

Používání strpos () a preg_match () -extrémy. Nejsou přímo spojeny s otázkou porovnání termínů. Ale otázkou algoritmu je otázka použití kombinace stylů, využití všech možností k dosažení spolehlivého a správného výsledku.

Funkčnost PHP: porovnání řetězců

Arzenál jazyka ve srovnání s řetězci není jenčistě srovnávací funkce, ale také kombinace s přímým vyhledáváním nebo nahrazením. Ne vždy by se akce měla shodovat s porovnáním, protože toto nemusí nutně vést ke změně v žádné linii. Často musíte vybrat jednu nebo druhou větev algoritmu.

Obvyklá verze porovnávání řetězců PHP: se provádí pomocí funkce int strcmp (s1, s2).

Výsledek funkce:

  • 0 - řádky jsou stejné;
  • -1 - první řádek je menší než druhý;
  • 1 - první řádek je větší než druhý.

V praxi to znamená, že prvnídruhý řádek, ze kterého se rozhodne funkce PHP (porovnání řetězců). Omezená verze strpos (), protože ve druhém případě můžete znát pozici záznamu.

Funkce strcmp () rozlišuje velká a malá písmena. Pokud potřebujete porovnat řetězce nerozlišující velká a malá písmena, PHP doporučuje použít strcasecmp (). Syntaxe je podobná.

V praxi se často vyžaduje, aby nepracovali se všemiřetězec, ale pouze s jeho částí. Za tímto účelem obsahuje sada funkcí PHP (porovnání řetězců) strncmp (s1, s2, N). Třetí parametr říká, že chcete porovnat pouze N-bajty. Výsledek je podobný strcmp ().

Pole, řetězce a srovnání

Data jsou téměř vždy reprezentována řádky. Pokud vezmeme v úvahu pole, objekty nebo informační struktury, pak jsou to jednoduše různé možnosti pro kombinaci jednodušších řetězcových struktur.

Funkce porovnávání řetězců php

Řetězcová pole a řetězce mohou býtprezentovány doplňkovým způsobem. Transformace pole do řetězce pomocí funkce implode (pole, symbol), například: $ margins1 = implode (",", $ style-> getInnerMargin ()); ... operace algoritmu / uživatele ...; $ margins2 = implode (",", $ style-> getInnerMargin ()) vám umožňuje sloučit všechny pozice objektu do řady pozic.

Pak můžete provést porovnání řetězců PHP a projednou: $ check = strcmp ($ margins1, $ margins2) a ujistěte se, že algoritmus nebo uživatel něco změnil (nebo ne). Pokud provedete srovnání obvyklým způsobem, budete muset třídit prvky polí. To trvá déle a vypadá více objemně.

Objekty a řetězce

Ještě účinnějšího využití PHP (porovnání řetězců) lze dosáhnout pomocí objektově orientovaných nápadů.

Moderní pohled na objektynavrhuje jejich vlastnosti a metody. První jsou obvykle reprezentována čísly, řetězci, poli a dalšími objekty. Druhá často zahrnuje metody zápisu (vložení) do řetězce a obnovení z řetězce (get).

Na rozdíl od polí objekt pracujejeho vlastnosti a interaguje s jinými objekty. Objekt je „kompetentní“ v tom, co jeho vlastnosti mají pro algoritmus, program jako celek, skutečný význam.

php řetězec a srovnání čísel

Tento okamžik poskytuje základ a příležitostzáznamy zaznamenávat pouze potřebné informace do řetězce a při obnovení z řetězce obnovit všechny pracovní vlastnosti do požadovaného stavu. Obvykle jsou v jakémkoli objektu podstatné a provozní informace (dočasné). Implementace takové myšlenky nejen šetří paměť, místo na disku, záznamy databáze, ale také umožňuje porovnávat řetězce s jednoduššími a přesnějšími prostředky.

Syntaxe a sémantika

PHP se vyvíjí dynamicky a jeho funkčnost jako vZ hlediska porovnávání řetězců a ve vztahu k jejich zpracování se neustále zlepšuje. Nic však nebrání vývojáři v přesunutí těžiště do oblasti sémantiky.

Jistě, funkčnost je dobrá, ale jejípoužití lze přenést do sémantické části kódu, na objekty. Když je algoritmus prezentován jako systém interakce objektů, vypadá to mnohem lépe než posloupnost srovnání a akcí v přímém, sekvenčním, klasickém stylu.