Funksionet për të punuar me vargje. Teoria e grupeve - PHP: Arrays - Hexlet Php kryqëzimi i vargjeve sipas vlerës

Teoria e grupeve. Unë e di se sa njerëz kanë frikë nga matematikanët, por konkretisht teoria e grupeve (naive) është shumë e thjeshtë dhe e kuptueshme. Për më tepër, ne i përdorim vazhdimisht elementet e tij në jetën e përditshme. Dhe në programim ndodh në çdo hap.

Koncepti themelor i teorisë së grupeve, çuditërisht, është një tufë me. Një grup nënkupton një koleksion objektesh të natyrës arbitrare, të konsideruara si një tërësi e vetme. Shembulli më i thjeshtë janë numrat. Kompleti i numrave arabë përfshin 10 elemente dhe është përfundimtar. Koncepti i fundshmërisë është intuitiv dhe do të thotë që një grup ka një numër të kufizuar elementësh.

Një shembull i një bashkësie të pafundme janë numrat natyrorë. Nga ana tjetër, bashkësia e numrave natyrorë është një nëngrup numrash të plotë, të cilët nga ana tjetër janë një nëngrup numrash racionalë, e kështu me radhë.

"Nënbashkësi" do të thotë që të gjithë elementët e një grupi përfshihen gjithashtu në një grup tjetër, të quajtur superset(në lidhje me një nëngrup).

Përfaqësimi i grupeve sipas rrathëve është mjaft i përshtatshëm. Ju mund të vlerësoni shpejt se si grupe të ndryshme lidhen me njëri-tjetrin.

Por objektet matematikore si numrat nuk janë objektet e vetme të mundshme të bashkësive. Një grup mund të quhet një grup njerëzish që qëndrojnë në një stacion autobusi duke pritur autobusin e tyre, ose banorë të apartamenteve në një shtëpi, qytet ose vend. Çdo koleksion i çdo objekti që duam ta konsiderojmë si një tërësi e vetme.

Gjëja kryesore për ne në teorinë e grupeve janë operacionet mbi to. Këto përfshijnë: shtimin, bashkimin, kryqëzimin, ndryshimin, produktin kartezian dhe disa të tjera.

Një shembull i thjeshtë. Kur vizitoni faqen e një personi tjetër në Facebook, Facebook ju shfaq një bllok me miqtë e përbashkët. Nëse supozojmë se miqtë tuaj dhe miqtë e mikut tuaj janë dy grupe, atëherë miqtë e përbashkët janë grupi i marrë si kryqëzim i grupeve origjinale të miqve.

Duke kaluar te programimi, do të vini re se një grup është shumë i ngjashëm me një grup, dhe me të vërtetë mund të mendohet si i tillë. Pse është kjo kaq e rëndësishme? Duke kuptuar parimet pas operacioneve të caktuara, ju mund t'i zbatoni ato në mënyrën më të shpejtë dhe më efikase. Për shembull, duke ditur që ju nevojitet një operacion i kryqëzimit të vendosur në php, mund të përpiqeni të gjeni një funksion që kryen detyrën. Për ta bërë këtë, thjesht futni pyetjen në Google: grupi php kryqëzohet(vendos - vendos, kryqëzoj - kryqëzim). Lidhja e parë (të paktën për mua) në rezultatet e kërkimit çon në funksionin e dëshiruar të grupit_ndërprerje. E njëjta gjë ju pret me operacionet e tjera. Kjo është një përgjigje e pjesshme për pyetjen "a kanë nevojë programuesit për matematikë?"

Nga rruga, jo të gjitha gjuhët kanë funksione të integruara për të punuar me grupe. Në disa, ju duhet të instaloni biblioteka shtesë për këtë, dhe në disa, për shembull, në Ruby, operacionet me grupe zbatohen duke përdorur operatorët aritmetikë (bashkimi i grupeve: coll1 + coll2).

Më vete, vlen të thuhet se bazat e të dhënave relacionale janë ndërtuar mbi idetë e algjebrës relacionale, në të cilën teoria e grupeve luan një rol qendror. Bazat e të dhënave janë një pjesë integrale e zhvillimit të ueb-it dhe do t'i njohim më vonë.

Le të shohim operacionet bazë:

Kryqëzimi

Kryqëzimi i grupeve është një grup që përfshin elementë që shfaqen në të gjitha grupet e dhëna në të njëjtën kohë.

["vasya", "petya"]

Ky funksion pranon çdo numër vargjesh. Kjo do të thotë, ju mund të gjeni kryqëzimin e çdo numri vargjesh në një thirrje.

Një shoqatë

Një bashkim grupesh është një grup që përmban elemente të të gjitha grupeve të dhëna. Set union në PHP nuk mund të bëhet me një thirrje, por mund të simulohet duke lidhur dy funksione:

["vasya", "kolya", "petya", "igor", "petya", "sergey", "vasya", "sasha"]; // unike heq dublikatat $sharedFriends = array_unique($friends); // => ["vasya", "kolya", "petya", "igor", "sergey", "sasha"]

Shtim (ndryshim)

Dallimi i dy grupeve është një grup që përfshin elementë të grupit të parë që nuk përfshihen në të dytin. Në programim, ky operacion shpesh quhet ndryshim.

["kolya"]

I përkasin turmës

Ju mund të kontrolloni nëse një element i përket një grupi duke përdorur funksionin in_array:

Detyrë
Ka dy vargje, dhe ju dëshironi të gjeni bashkimin e tyre (të gjithë elementët, por nëse një element është në të dy vargjet, ai numërohet një herë), kryqëzimin (elementet në të dy vargjet) ose ndryshimin (elementet në një grup që nuk janë në tjetri).

Zgjidhje
Për të përcaktuar një bashkim:
$union = varg_unique(array_bashkimi ($a, $b));

Për të llogaritur kryqëzimin:
$kryqëzimi = kryqëzimi_arresë($a, $b);

Për të gjetur një ndryshim të thjeshtë:
$difference = varg_diff($a, $b);

Dhe për të marrë ndryshimin simetrik (ekskluzive OR):

Diskutim
Shumë nga komponentët e kërkuar për llogaritje të tilla janë të integruara në PHP; ju vetëm duhet t'i kombinoni ato në sekuencën e duhur.

Kur një bashkim merret nga dy vargje, krijohet një grup gjigand me të gjitha vlerat e vargjeve origjinale. Por funksioni array_merge() lejon vlera të dyfishta kur bashkohen dy vargje numerike, kështu që duhet të thërrisni funksionin array_unique().
për të filtruar elementë të tillë.

Megjithatë, kjo mund të rezultojë në boshllëqe sepse funksioni array_unique() nuk e kompakton grupin. Megjithatë, ky nuk është problem sepse si deklarata foreach ashtu edhe funksioni every() trajtojnë vargjet me popullsi të rrallë pa ndërhyrje.

Funksioni për llogaritjen e kryqëzimit quhet thjesht array_intersection() dhe nuk kërkon ndonjë përpjekje shtesë.

Funksioni array_diff() kthen një grup që përmban të gjithë elementët unikë të grupit $old që nuk janë në grupin $new. Ky quhet një ndryshim i thjeshtë:


$difference = array_diff($i vjetër, $i ri);
Array
=> jo
=> te
)

Vargu $difference që rezulton përmban "not" dhe "to" sepse array_diff() është sensitive. Ai nuk përfshin elementin "whatever" sepse nuk është në grupin $old.

Për të marrë ndryshimin e kundërt, ose, me fjalë të tjera, për të gjetur elementet unike të grupit $new që mungojnë në grupin $old, duhet të ndërroni argumentet:
$old = array("Për", "të jetë", "ose", "jo", "për", "të jetë");
$new = grup ("Për", "të jetë", "ose", "çfarëdo");
$reverse_diff = varg_diff($i ri, $i vjetër);
Array
=> çfarëdo qoftë
)

Vargu $reverse_diff përmban vetëm elementin "whatever".

Nëse keni nevojë të aplikoni një funksion ose filtër tjetër në funksionin array_diff(), vendosni algoritmin tuaj të diferencës (zbritjes):

// aplikoni një algoritëm të zbritjes pa ndjeshmëri të madhe; dallim -i
$seen = grup();
foreach ($i ri si $n) (
$seen++;
}
foreach ($i vjetër si $o) (
$o = strtolower($o);
nëse (!$shihet[$o]) ($diff[$o] = $o;)
}

Deklarata e parë foreach krijon një grup shoqërues për kërkime të mëtejshme.

Pastaj kalon nëpër grupin $old dhe, nëse elementi nuk gjendet gjatë kërkimit, ai shtohet në grupin $diff.

Ky proces mund të përshpejtohet duke kombinuar funksionet array_diff() dhe array_map():

$diff = array_diff(array_map("strtolower", $old),
array_map("strtolower", $new));

Dallimi simetrik është se çfarë është në $a por jo në $b, plus çfarë është në $b por jo në $a:

$difference = varg_bashkimi (array_diff($a, $b), varg_diff($b, $a));

Pasi të vendoset, algoritmi ecën përpara. Funksioni array_diff() thirret dy herë dhe përcakton dy dallime. Më pas ato kombinohen në një grup. Nuk ka nevojë të thirret array_unique() pasi këto vargje janë krijuar posaçërisht për të mos pasur elementë të përbashkët.

Këto funksione ju lejojnë të manipuloni vargjet në mënyra të ndryshme. Vargjet janë ideale për ruajtjen, modifikimin dhe punën me grupe variablash.

Vargjet një dhe shumë-dimensionale mbështeten, të dyja të krijuara nga përdoruesi dhe të kthyera si rezultat nga disa funksione. Ekzistojnë funksione të veçanta për punën me bazat e të dhënave që e bëjnë më të lehtë punën me grupe të dhënash të kthyera si rezultat i ekzekutimit të pyetjeve; Ekzistojnë gjithashtu funksione që kthejnë vargjet si rezultate.

Për të mësuar më shumë rreth asaj se si krijohen dhe përdoren vargjet në PHP, shihni kapitullin Arrays të këtij tutoriali.

Instalimi

Nuk kërkohet instalim për të përdorur këto veçori pasi ato janë pjesë e bërthamës PHP.

Konstante të paracaktuara

Konstantat e listuara më poshtë janë gjithmonë të disponueshme si pjesë e bërthamës PHP.

RAST_ULTË(numër i plotë)

RAST_ULTË përdoret me funksion array_change_key_case() për të treguar nëse çelësat e grupeve duhet të konvertohen në shkronja të vogla. Funksioni i parazgjedhur array_change_key_case() Kjo konstante përdoret.

CASE_UPPER(numër i plotë)

CASE_UPPER përdoret me funksion array_change_key_case() për të treguar nëse çelësat e grupeve duhet të konvertohen në shkronja të mëdha.

array_change_key_case - Kthejeni një grup, çelësat e karaktereve të të cilit janë konvertuar në karaktere të mëdha ose të vogla array_chunk - Ndani një grup në copa array_combine - Krijoni një grup të ri duke përdorur një grup si çelësa dhe një tjetër si vlerat përkatëse - array_count_values ​​- - Numëroni numrin e të gjitha vlerave array_diff_assoc -- Llogaritni divergjencën e vargjeve me kontrollin shtesë të indeksit array_diff_key -- Llogaritni divergjencën e vargjeve duke krahasuar çelësat array_diff_uassoc -- Llogaritni divergjencën e grupit me kontrollin shtesë të indeksit të kryer duke përdorur një funksion të përcaktuar nga përdoruesi duke përdorur array_diff_diff_diff krahasimi i kyçeve të kthimit të thirrjes array_diff -- Llogaritni divergjencën e grupit array_fill -- Plotësoni një grup me një vlerë specifike array_filter -- Aplikoni një filtër në një grup duke përdorur kthimin e thirrjes së array_flip -- Ndërroni vlerat e vargut -- Llogaritni kryqëzimin e vargjeve duke krahasuar çelësat array_intersect_uassoc -- Llogaritni kryqëzimin e vargjeve me kontrollin shtesë të indeksit të bërë duke përdorur funksionin e përcaktuar nga përdoruesi array_intersect_ukey -- Llogaritni kryqëzimin e grupit duke përdorur krahasimin e kthimit të kthimit të çelësave array_intersect -- Llogaritni konvergjencën e grupit array_key_specified -- Kontrolloni nëse çelësi është i specifikuar -- është i pranishëm në array_çelësat e grupit -- Zgjidh të gjithë çelësat në array_map të grupit -- Apliko një funksion kthimi të thirrjes për të gjithë elementët e vargjeve të specifikuara array_merge_recursive -- Bashkoni në mënyrë rekursive dy ose më shumë vargje array_merge -- Bashkoni dy ose më shumë vargje array_multisort -- Rendit të shumëfishta vargjeve ose vargjeve shumëdimensionale array_pad -- Rritja e madhësisë së një grupi në një vlerë të caktuar array_pop -- Merr elementin e fundit të një grupi array_product -- Llogarit produktin e vlerave të grupit Array_push -- Shtoni një ose më shumë elementë në fund të një grup varg_rand -- Zgjidh një ose më shumë vlera të rastësishme nga array_reduce -- Redukto në mënyrë të përsëritur një grup në një vlerë të vetme duke përdorur funksionin e kthimit të thirrjes array_reverse -- Kthen një grup me elementë në renditje të kundërt array_search -- Kërkon grupin për një vlerë të caktuar dhe kthen çelësin përkatës nëse array_shift është i suksesshëm -- Merr elementin e parë të grupit array_slice -- Zgjidh një pjesë të një vargu array_splice -- Hiq një sekuencë të elementeve të grupit dhe zëvendëso atë me një sekuencë tjetër array_sum -- Llogarit shumën e vlerave të grupit array_udiff_assoc -- Llogaritni divergjencën në vargje me kontroll shtesë të indeksit, duke përdorur funksionin e kthimit të thirrjes array_udiff_uassoc për të krahasuar vlerat -- Llogaritni divergjencën në vargje me kontroll shtesë të indeksit, duke përdorur funksionin e kthimit të thirrjes array_udiff për të krahasuar vlerat dhe indekset -- Llogaritni divergjenca e vargjeve duke përdorur funksionin e kthimit të thirrjes array_uintersect_assoc për krahasim -- Llogaritni kryqëzimin e grupit me kontrollin shtesë të indeksit, duke përdorur funksionin e kthimit të thirrjes array_uintersect_uassoc për të krahasuar vlerat -- Llogaritni kryqëzimin e grupit me kontrollin shtesë të indeksit duke përdorur grupin_uintersect për të krahasuar vlerat dhe indekset - Llogaritni kryqëzimin e vargjeve duke përdorur kthimin e kthimit të grupit_unique për të krahasuar vlerat - Hiqni vlerat e kopjuara nga një grup array_unshift - Shtoni një ose më shumë elementë në fillim të vargut_vlerat e grupit - Zgjidhni të gjitha vlerat e një varg array_walk_recursive -- Zbatoni në mënyrë rekursive një funksion të personalizuar për secilin element të grupit array_walk -- Aplikoni një funksion të personalizuar për secilin element të grupit të grupit -- Krijoni një varg grupi -- Renditni grupin në rend të kundërt, duke ruajtur çelësat asort - - Rendit grupin, duke ruajtur tastet kompakte -- Krijo një grup që përmban emrat e variablave dhe vlerat e tyre