მასივებით მუშაობის ფუნქციები. სიმრავლეების თეორია - PHP: მასივები - Hexlet Php მასივების გადაკვეთა მნიშვნელობის მიხედვით

ნაკრების თეორია. ვიცი რამდენს ეშინია მათემატიკოსების, მაგრამ კონკრეტულად სიმრავლეების თეორია (გულუბრყვილო) ძალიან მარტივი და გასაგებია. უფრო მეტიც, ჩვენ მუდმივად ვიყენებთ მის ელემენტებს ყოველდღიურ ცხოვრებაში. და პროგრამირებაში ეს ხდება ყოველ ნაბიჯზე.

სიმრავლის თეორიის ძირითადი კონცეფცია, გასაკვირია, არის რამოდენიმე. კომპლექტი აღნიშნავს თვითნებური ხასიათის ობიექტების კრებულს, განიხილება როგორც ერთიან მთლიანობა. უმარტივესი მაგალითია რიცხვები. არაბული ციფრების ნაკრები მოიცავს 10 ელემენტს და არის საბოლოო. სასრულობის კონცეფცია ინტუიციურია და ნიშნავს, რომ სიმრავლეს აქვს ელემენტების სასრული რაოდენობა.

უსასრულო სიმრავლის მაგალითია ნატურალური რიცხვები. თავის მხრივ, ნატურალური რიცხვების სიმრავლე არის მთელი რიცხვების ქვესიმრავლე, რომლებიც, თავის მხრივ, რაციონალური რიცხვების ქვეჯგუფია და ა.შ.

"ქვეკომპლექტი" ნიშნავს, რომ ერთი სიმრავლის ყველა ელემენტი ასევე შედის სხვა კომპლექტში, ე.წ სუპერსეტი(ქვეჯგუფთან შედარებით).

წრეების მიერ ნაკრების წარმოდგენა საკმაოდ მოსახერხებელია. თქვენ შეგიძლიათ სწრაფად შეაფასოთ, თუ როგორ უკავშირდება სხვადასხვა ნაკრები ერთმანეთს.

მაგრამ მათემატიკური ობიექტები, როგორიცაა რიცხვები, არ არის სიმრავლეების ერთადერთი შესაძლო ობიექტები. კომპლექტი შეიძლება ეწოდოს ავტობუსის გაჩერებაზე მდგომი ადამიანების ჯგუფს, რომელიც ელოდება ავტობუსს, ან ბინების მაცხოვრებლები ერთ სახლში, ქალაქში ან ქვეყანაში. ნებისმიერი ობიექტის ნებისმიერი კოლექცია, რომელიც გვინდა განვიხილოთ, როგორც ერთიან მთლიანობა.

ჩვენთვის სიმრავლეების თეორიაში მთავარია მათზე მოქმედებები. ესენია: დამატება, გაერთიანება, კვეთა, განსხვავება, დეკარტის პროდუქტი და სხვა.

მარტივი მაგალითი. როდესაც ფეისბუქზე სხვა ადამიანის გვერდს ეწვევით, ფეისბუქი გიჩვენებთ ბლოკს საერთო მეგობრებთან. თუ ჩავთვლით, რომ თქვენი მეგობრები და თქვენი მეგობრის მეგობრები ორი ნაკრებია, მაშინ საერთო მეგობრები არის ნაკრები, რომელიც მიღებულია როგორც მეგობრების ორიგინალური ნაკრების კვეთა.

პროგრამირებაზე გადასვლისას შეამჩნევთ, რომ მასივი ძალიან ჰგავს კომპლექტს და ის მართლაც ასე შეიძლება ჩაითვალოს. რატომ არის ეს ასე მნიშვნელოვანი? გარკვეული ოპერაციების მიღმა არსებული პრინციპების გაცნობიერებით, შეგიძლიათ მათი განხორციელება უსწრაფესი და ეფექტური გზით. მაგალითად, იმის ცოდნა, რომ php-ში დაგჭირდებათ კვეთის ოპერაცია, შეგიძლიათ სცადოთ იპოვოთ ფუნქცია, რომელიც ასრულებს ამოცანას. ამისათვის უბრალოდ შეიტანეთ მოთხოვნა Google-ში: php ნაკრები იკვეთება(კომპლექტი - დაყენება, გადაკვეთა - გადაკვეთა). ძიების შედეგებში პირველი (ყოველ შემთხვევაში ჩემთვის) ბმული მივყავართ სასურველ მასივის_გადაკვეთის ფუნქციამდე. იგივე გელით სხვა ოპერაციებთან დაკავშირებით. ეს არის ნაწილობრივი პასუხი კითხვაზე "საჭიროებენ თუ არა პროგრამისტებს მათემატიკა?"

სხვათა შორის, ყველა ენას არ აქვს ჩაშენებული ფუნქციები კომპლექტებთან მუშაობისთვის. ზოგიერთში ამისათვის საჭიროა დამატებითი ბიბლიოთეკების დაყენება, ზოგიერთში, მაგალითად, Ruby-ში, ოპერაციები ნაკრებებით ხორციელდება არითმეტიკული ოპერატორების გამოყენებით (სიმრავლეთა კავშირი: coll1 + coll2).

ცალკე უნდა ითქვას, რომ რელაციური მონაცემთა ბაზები აგებულია რელაციური ალგებრის იდეებზე, რომლებშიც სიმრავლეების თეორია ცენტრალურ როლს ასრულებს. მონაცემთა ბაზები ვებ განვითარების განუყოფელი ნაწილია და მათ მოგვიანებით გავეცნობით.

მოდით შევხედოთ ძირითად ოპერაციებს:

კვეთა

კომპლექტების კვეთა არის ნაკრები, რომელიც მოიცავს ელემენტებს, რომლებიც ერთდროულად ჩნდება ყველა მოცემულ კომპლექტში.

["ვასია", "პეტია"]

ეს ფუნქცია იღებს მასივების ნებისმიერ რაოდენობას. ანუ, თქვენ შეგიძლიათ იპოვოთ ნებისმიერი რაოდენობის მასივების კვეთა ერთ ზარზე.

ასოციაცია

სიმრავლეთა კავშირი არის სიმრავლე, რომელიც შეიცავს ყველა მოცემული სიმრავლის ელემენტებს. PHP-ში დაყენების კავშირი არ შეიძლება გაკეთდეს ერთი ზარით, მაგრამ მისი სიმულაცია შესაძლებელია ორი ფუნქციის შეერთებით:

["ვასია", "კოლია", "პეტია", "იგორი", "პეტია", "სერგეი", "ვასია", "საშა"]; // უნიკალური შლის დუბლიკატებს $sharedFriends = array_unique($friends); // => ["ვასია", "კოლია", "პეტია", "იგორი", "სერგეი", "საშა"]

დამატება (განსხვავება)

ორი კომპლექტის განსხვავება არის ნაკრები, რომელიც მოიცავს პირველი ნაკრების ელემენტებს, რომლებიც არ შედის მეორეში. პროგრამირებაში ამ ოპერაციას ხშირად უწოდებენ განსხვავება.

["კოლია"]

სიმრავლის კუთვნილება

შეგიძლიათ შეამოწმოთ, ეკუთვნის თუ არა ელემენტი კომპლექტს in_array ფუნქციის გამოყენებით:

დავალება
არსებობს ორი მასივი და გსურთ იპოვოთ მათი კავშირი (ყველა ელემენტი, მაგრამ თუ ელემენტი ორივე მასივშია, ის ითვლება ერთხელ), კვეთა (ელემენტები ორივე მასივში) ან სხვაობა (ელემენტები ერთ მასივში, რომლებიც არ არის სხვა).

გამოსავალი
კავშირის განსაზღვრა:
$union = მასივი_უნიკალური (მასივი_შერწყმა ($a, $b));

გადაკვეთის გამოსათვლელად:
$კვეთა = მასივის_გადაკვეთა ($a, $b);

მარტივი განსხვავების საპოვნელად:
$difference = array_diff($a, $b);

და სიმეტრიული სხვაობის მისაღებად (ექსკლუზიური OR):

დისკუსია
ასეთი გამოთვლებისთვის საჭირო ბევრი კომპონენტი ჩაშენებულია PHP-ში, თქვენ უბრალოდ უნდა დააკავშიროთ ისინი შესაბამისი თანმიმდევრობით.

როდესაც კავშირი მიიღება ორი მასივიდან, იქმნება ერთი გიგანტური მასივი ორიგინალური მასივების ყველა მნიშვნელობით. მაგრამ array_merge() ფუნქცია იძლევა დუბლიკატების მნიშვნელობებს ორი რიცხვითი მასივის შერწყმისას, ასე რომ თქვენ უნდა გამოიძახოთ array_unique() ფუნქცია.
ასეთი ელემენტების გასაფილტრად.

თუმცა, ამან შეიძლება გამოიწვიოს ხარვეზები, რადგან array_unique() ფუნქცია არ აკომპლექტებს მასივს. თუმცა, ეს არ არის პრობლემა, რადგან როგორც foreach განცხადება და თითოეული() ფუნქცია უმკლავდება იშვიათად დასახლებულ მასივებს ჩარევის გარეშე.

კვეთის გამოთვლის ფუნქციას უბრალოდ უწოდებენ array_intersection() და არ საჭიროებს დამატებით ძალისხმევას.

array_diff() ფუნქცია აბრუნებს მასივს, რომელიც შეიცავს $old მასივის ყველა უნიკალურ ელემენტს, რომლებიც არ არის $new მასივში. ამას ჰქვია მარტივი განსხვავება:


$difference = array_diff($ ძველი, $ახალი);
მასივი
=> არა
=> რომ
)

შედეგად მიღებული $difference მასივი შეიცავს "not" და "to", რადგან array_diff() არის რეგისტრის მგრძნობიარე. ის არ შეიცავს "whatever" ელემენტს, რადგან ის არ არის $old მასივში.

საპირისპირო სხვაობის მისაღებად, ან სხვა სიტყვებით რომ ვთქვათ, რომ იპოვოთ $new მასივის უნიკალური ელემენტები, რომლებიც აკლია $old მასივში, თქვენ უნდა შეცვალოთ არგუმენტები:
$old = array("To", "იყოს", "ან", "არა", "to", "Be");
$new = array("To", "be", "or", "whatever");
$reverse_diff = array_diff($ახალი, $ძველი);
მასივი
=> რაც არ უნდა იყოს
)

$reverse_diff მასივი შეიცავს მხოლოდ "whatever" ელემენტს.

თუ თქვენ გჭირდებათ ფუნქციის ან სხვა ფილტრის გამოყენება array_diff() ფუნქციაში, ჩადეთ თქვენი განსხვავების (გამოკლების) ალგორითმი:

// გამოკლების ალგორითმის გამოყენება; განსხვავება -ი
$seen = მასივი();
foreach ($ახალი როგორც $n) (
$seen++;
}
foreach ($ძველი $o) (
$o = strtolower($o);
თუ (!$ნახულია[$o]) ($diff[$o] = $o;)
}

პირველი foreach განცხადება ქმნის ასოციაციურ მასივს შემდგომი ძიებისთვის.

შემდეგ ის გადადის $old მასივში და თუ ელემენტი ვერ მოიძებნა ძიების დროს, ემატება $diff მასივს.

ამ პროცესის დაჩქარება შესაძლებელია array_diff() და array_map() ფუნქციების კომბინაციით:

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

სიმეტრიული განსხვავება არის $a-ში, მაგრამ არა $b-ში, პლუს რა არის $b-ში, მაგრამ არა $a-ში:

$სხვაობა = მასივი_შერწყმა (მასივი_განსხვავებები ($a, $b), მასივი_განსხვავებები ($b, $a));

დადგენის შემდეგ, ალგორითმი წინ მიიწევს. array_diff() ფუნქცია გამოიძახება ორჯერ და განსაზღვრავს ორ განსხვავებას. შემდეგ ისინი გაერთიანებულია ერთ მასივში. არ არის საჭირო array_unique()-ის გამოძახება, რადგან ეს მასივები სპეციალურად შეიქმნა ისე, რომ არ ჰქონდეთ საერთო ელემენტები.

ეს ფუნქციები საშუალებას გაძლევთ მანიპულიროთ მასივებით სხვადასხვა გზით. მასივები იდეალურია ცვლადების ნაკრების შესანახად, შესაცვლელად და სამუშაოდ.

მხარდაჭერილია ერთ და მრავალგანზომილებიანი მასივები, რომლებიც შექმნილია მომხმარებლის მიერ და დაბრუნებულია გარკვეული ფუნქციის შედეგად. არსებობს მონაცემთა ბაზებთან მუშაობის სპეციალური ფუნქციები, რომლებიც აადვილებს მოთხოვნის შესრულების შედეგად დაბრუნებულ მონაცემთა მასივებთან მუშაობას; ასევე არის ფუნქციები, რომლებიც აბრუნებენ მასივებს როგორც შედეგებს.

მეტი ინფორმაციისთვის იმის შესახებ, თუ როგორ იქმნება და გამოიყენება მასივები PHP-ში, იხილეთ ამ სახელმძღვანელოს მასივების თავი.

ინსტალაცია

არ არის საჭირო ინსტალაცია ამ ფუნქციების გამოსაყენებლად, რადგან ისინი PHP ბირთვის ნაწილია.

წინასწარ განსაზღვრული მუდმივები

ქვემოთ ჩამოთვლილი მუდმივები ყოველთვის ხელმისაწვდომია, როგორც PHP ბირთვის ნაწილი.

CASE_LOWER(მთელი რიცხვი)

CASE_LOWERგამოიყენება ფუნქციით array_change_key_case()მიუთითოს, უნდა გადაიზარდოს თუ არა მასივის კლავიშები მცირე ასოებით. ნაგულისხმევი ფუნქცია array_change_key_case()ეს მუდმივი გამოიყენება.

CASE_UPPER(მთელი რიცხვი)

CASE_UPPERგამოიყენება ფუნქციით array_change_key_case()რათა მიუთითოთ მასივის კლავიშები უნდა გარდაიქმნას თუ არა დიდ ასოებზე.

array_change_key_case -- დააბრუნეთ მასივი, რომლის სიმბოლოების კლავიშები გარდაიქმნება ზემო ან პატარა ასოებად array_chunk -- დაყავით მასივი ნაწილებად array_combine -- შექმენით ახალი მასივი ერთი მასივის კლავიშად და მეორე როგორც შესაბამისი მნიშვნელობებით Array_count_values ​​-- - დაითვალეთ ყველა მნიშვნელობის რაოდენობა array_diff_assoc - გამოთვალეთ მასივის დივერგენცია დამატებითი ინდექსის შემოწმებით array_diff_key - გამოთვალეთ მასივის დივერგენცია კლავიშების შედარებით array_diff_uassoc - გამოთვალეთ მასივის განსხვავება დამატებითი ინდექსის შემოწმებით, რომელიც შესრულებულია მომხმარებლის მიერ განსაზღვრული ფუნქციის arrayg- array_diff_diff-ის გამოყენებით კლავიშების შედარება გამოძახება array_diff -- გამოთვალეთ მასივის დივერგენცია array_fill -- შეავსეთ მასივი კონკრეტული მნიშვნელობით array_filter -- გამოიყენეთ ფილტრი მასივზე array_flip გამოძახების გამოყენებით -- მასივის მნიშვნელობების შეცვლა Array_intersect_assoc -- გამოთვალეთ მასივის კონვერგენცია დამატებითი ინდექსის შემოწმება array_intersect_key -- გამოთვალეთ მასივის კვეთა კლავიშების შედარებით array_intersect_uassoc -- გამოთვალეთ მასივის კვეთა დამატებითი ინდექსის შემოწმებით, რომელიც შესრულებულია მომხმარებლის მიერ განსაზღვრული ფუნქციის array_intersect_ukey -- მასივის კვეთის გამოთვლა გასაღების შედარების გამოძახებით array_intersect -- გამოთვალეთ მასივის კონვერგენცია array_key_specified -- შეამოწმეთ არის თუ არა გასაღები არის მასივის array_keys -- აირჩიეთ ყველა კლავიატურა array_map -- გამოძახების ფუნქციის გამოყენება მითითებული მასივების ყველა ელემენტზე array_merge_recursive -- რეკურსიულად შერწყმა ორი ან მეტი მასივი array_merge -- ორი ან მეტი მასივის შერწყმა array_multisort -- მრავალჯერადი სორტირება მასივები ან მრავალგანზომილებიანი მასივები array_pad -- გაზარდეთ მასივის ზომა მოცემულ მნიშვნელობამდე array_pop -- მოიძიეთ მასივის ბოლო ელემენტი array_product -- გამოთვალეთ მასივის მნიშვნელობების ნამრავლი Array_push -- დაამატეთ ერთი ან მეტი ელემენტი ბოლოში მასივი array_rand -- აირჩიეთ ერთი ან მეტი შემთხვევითი მნიშვნელობა array_reduce-დან -- განმეორებით შეამცირეთ მასივი ერთ მნიშვნელობამდე გამოძახების ფუნქციის გამოყენებით array_reverse -- აბრუნებს მასივს საპირისპირო თანმიმდევრობით array_search -- ეძებს მასივს მოცემულ მნიშვნელობას და აბრუნებს შესაბამის გასაღებს, თუ წარმატებულია array_shift -- მოიძიეთ მასივის პირველი ელემენტი array_slice - - აირჩიეთ მასივის ნაჭერი array_splice -- ამოიღეთ მასივის ელემენტების თანმიმდევრობა და შეცვალეთ იგი სხვა მიმდევრობით array_sum -- გამოთვალეთ მასივის მნიშვნელობების ჯამი array_udiff_assoc -- გამოთვალეთ დივერგენცია მასივებში დამატებითი ინდექსის შემოწმებით, გამოძახების ფუნქციის გამოყენებით array_udiff_uassoc მნიშვნელობების შესადარებლად -- გამოთვალეთ დივერგენცია მასივებში დამატებითი ინდექსის შემოწმებით, array_udiff გამოძახების ფუნქციის გამოყენებით მნიშვნელობებისა და ინდექსების შესადარებლად -- გამოთვლა მასივის დივერგენცია array_uintersect_assoc გამოძახების ფუნქციის გამოყენებით შედარებისთვის - გამოთვალეთ მასივის კვეთა დამატებითი ინდექსის შემოწმებით, array_uintersect_uassoc გამოძახების ფუნქციის გამოყენებით მნიშვნელობების შესადარებლად - გამოთვალეთ მასივის კვეთა დამატებითი ინდექსის შემოწმებით, array_uintersect გამოძახების მნიშვნელობების შედარებისთვის და ინდექსების შესადარებლად. - გამოთვალეთ მასივების კვეთა array_unique callback-ის გამოყენებით მნიშვნელობების შესადარებლად - ამოიღეთ დუბლიკატი მნიშვნელობები მასივიდან array_unshift - დაამატეთ ერთი ან მეტი ელემენტი მასივის დასაწყისში array_values ​​- აირჩიეთ ყველა მნიშვნელობა მასივი array_walk_recursive -- რეკურსიულად გამოიყენე მორგებული ფუნქცია მასივის თითოეულ ელემენტზე array_walk -- დააყენე პერსონალური ფუნქცია მასივის თითოეულ ელემენტზე -- შექმენი მასივი arsort -- დაალაგე მასივი საპირისპირო თანმიმდევრობით, კლავიშების ასორტის შენარჩუნებით - - დაალაგეთ მასივი, კლავიშების კომპაქტური შენარჩუნებით - შექმენით მასივი, რომელიც შეიცავს ცვლადების სახელებს და მათ მნიშვნელობებს