Jumla ya Nambari ya Mifuko katika Usanifu mara kwa mara ya PHP
Tuchunguze hali ifuatayo. Hebu tuseme tuna
kigeuzi cha mwaka, ambacho kinaweza kubadilika
kutoka 1990 hadi 2099.
Hebu tuseme tunataka kupata tarakimu mbili za mwisho
za mwaka kwenye mfuko. Tuandike usanifu unaofanana:
<?php
$reg = '#19(9\d)|20(\d\d)#';
?>
Hata hivyo, tunakabiliwa na usumbufu mmoja hapa. Jambo ni kwamba kwa miaka ya karne iliyopita, tarakimu mbili zitaingia kwenye mfuko wa kwanza, lakini kwa miaka ya karne ya pili - zitaingia kwenye wa pili. Tuangalie kwa mifano.
Hapa kuna chaguo la kwanza:
<?php
$str = '1991';
preg_match($reg, $str, $res);
var_dump($res); // [1 => '91']
?>
Na hapa kuna chaguo la pili:
<?php
$str = '2021';
preg_match($reg, $str, $res);
var_dump($res); // [2 => '21']
?>
Hebu sasa tuseme tunataka kuweka tarakimu zilizopatikana za mwaka kwenye kigeuzi. Tunakabiliwa na shida, kwani hatujui kwa usahihi, ni kwa ufunguo gani tuchukue data kutoka kwenye mfuko:
<?php
$year = $res[1]; // unahitaji ufunguo ama 1, ama 2
?>
Inaweza kutatuliwa shida hii kwa kutumia sharti:
<?php
if (!empty($res[1])){
$year = $res[1];
} else{
$year = $res[2];
}
?>
Hata hivyo, kuna suluhisho rahisi zaidi. Inaweza kutumika
amri maalum (?| ). Mifuko yote,
ambayo iko ndani yake itakuwa na
nambari moja.
Hebu tusahihishe usanifu wetu
<?php
$reg = '#(?|19(9\d)|20(\d\d))#';
?>
Na sasa mwaka wetu hakika utakuwa kwenye mfuko nambari moja:
<?php
$year = $res[1];
?>
Kuna masharti na tarehe, ambazo mwaka unaweza
kubadilika kutoka 1990 hadi 2099:
<?php
$arr = [
'31-12-2025',
'30-11-1995',
'29-10-1990',
];
?>
Kwa kila tarehi weka siku kwenye mfuko wa kwanza, mwezi kwenye wa pili, na tarakimu mbili za mwisho za mwaka - kwenye wa tatu.