დასახელებული კარმები PHP-ის რეგულარულ გამონათქვამებში
დავუშვათ, preg_match-ის საშუალებით გვსურს
თარიღის დაყოფა დღედ, თვედ და წლად. ამისთვის გამოვიყენოთ
კარმები:
<?php
$str = '2025-10-29';
$reg = '#(\d{4})-(\d{2})-(\d{2})#';
preg_match($reg, $str, $match);
var_dump($match); // გამოიტანს ['2025-10-29', '2025', '10', '29']
?>
როგორც ხედავთ, შედეგად ვიღებთ მასივს, რომელშიც ნულოვან ელემენტში იქნება მთელი თარიღი, პირველში - წელი, მეორეში - თვე, მესამეში - დღე.
თუმცა, ზოგჯერ მოსახერხებელი იქნებოდა კარმების შიგთავსის მიღება ასოციაციურ მასივად. ანუ ჩვენს შემთხვევაში კარგი იქნებოდა მიგვეღო აი ასეთი მასივი:
[
'year' => '2025',
'month' => '10',
'day' => '29'
]
ამისთვის რეგულარულ გამონათქვამებში არსებობს სპეციალური
სინტაქსი. აი ის: (?<name>pattern),
სადაც pattern - ეს არის რეგულარული გამონათქვამი, ხოლო name
- ეს არის კარმის სახელი.
მოდით გადავიწეროთ ჩვენი რეგულარული გამონათქვამი თარიღისთვის დასახელებული კარმების მეშვეობით:
<?php
$str = '2025-10-29';
$reg = '#(?<year>\d{4})-(?<month>\d{2})-(?<day>\d{2})#';
preg_match($reg, $str, $match);
var_dump($match);
?>
შედეგად ჩვენ მივიღებთ ასოციაციურ მასივს, რომელშიც გასაღებები იქნება კარმების სახელები, ხოლო მნიშვნელობები - ის, რაც მათში მოხვდა:
[
'year' => '2025',
'month' => '10',
'day' => '29',
]
სინამდვილეში, შედეგის მასივში კარმების მნიშვნელობები
იქნება ხელმისაწვდომი როგორც სახელის, ისე
რიგითი ნომრის მიხედვით. ანუ, მაგალითად,
წელი იქნება ხელმისაწვდომი 'year' გასაღებით
და 1 ნომრით, თვე - 'month' გასაღებით
და 2 ნომრით და ა.შ.:
[
'year' => '2025',
'month' => '10',
'day' => '29',
1 => '2025',
2 => '10',
3 => '29'
]
აღწერილ დასახელებულ კარმებს აქვთ კიდევ რამდენიმე
ალტერნატიული სინტაქსი: (?P<name>pattern)
და (?'name'pattern).
მოცემულია სტრიქონი დროით:
<?php
$str = '12:59:59';
?>
დაამატეთ საათები, წუთები და წამები ცალკეულ დასახელებულ კარმებში.
დაწერეთ ფუნქცია, რომელიც შედეგის მასივში წაშლის ყველა დანომრილ კარმს, დატოვებს მხოლოდ დასახელებულებს.