Computer >> कंप्यूटर ट्यूटोरियल >  >> प्रोग्रामिंग >> PHP

PHP जेनरेटर्स: yield कीवर्ड के साथ मेमोरी-कुशल इटरेशन


परिचय

foreach जैसे लूपिंग कंस्ट्रक्ट का उपयोग करके डेटा के बड़े संग्रह को पार करने के लिए बड़ी मेमोरी और काफी प्रोसेसिंग समय की आवश्यकता होगी। जेनरेटर्स के साथ, इन ओवरहेड्स के बिना डेटा के एक सेट पर इटरेट करना संभव है। एक जेनरेटर फंक्शन एक सामान्य फंक्शन के समान होता है। हालांकि, फंक्शन में return स्टेटमेंट के बजाय, जेनरेटर yield कीवर्ड का उपयोग करता है जिसे बार-बार निष्पादित किया जाता है ताकि इटरेट किए जाने वाले मान प्रदान किए जा सकें।

yield कीवर्ड जेनरेटर तंत्र का दिल है। भले ही इसका उपयोग return के समान प्रतीत होता है, यह फंक्शन के निष्पादन को नहीं रोकता। यह इटरेशन के लिए अगला मान प्रदान करता है और फंक्शन के निष्पादन को रोक देता है।

मान यील्ड करना

एक for लूप जेनरेटर फंक्शन के अंदर लूपिंग वेरिएबल के प्रत्येक मान को यील्ड करता है।

उदाहरण 1: सरल जेनरेटर

<?php
function squaregenerator() {
    for ($i = 1; $i <= 5; $i++) {
        yield $i * $i;
    }
}

$gen = squaregenerator();
foreach ($gen as $val) {
    echo $val . " ";
}
?>

जैसे ही foreach स्टेटमेंट पहली बार $val प्रदर्शित करने का प्रयास करता है, squaregenerator पहला एलिमेंट यील्ड करता है, $i को बनाए रखता है और foreach द्वारा अगली इटरेशन लेने तक निष्पादन को रोक देता है। आउटपुट एक नियमित foreach लूप के समान है।

आउटपुट

1 4 9 16 25

उदाहरण 2: range() फंक्शन को जेनरेटर के रूप में इम्प्लीमेंट करना

PHP का range() फंक्शन $start से $stop तक $step अंतराल के साथ इंटीजर्स की सूची लौटाता है। निम्न प्रोग्राम range() को जेनरेटर के रूप में इम्प्लीमेंट करता है:

<?php
function rangegenerator($start, $stop, $step) {
    for ($i = $start; $i <= $stop; $i += $step) {
        yield $i;
    }
}

foreach (rangegenerator(2, 10, 2) as $val) {
    echo $val . " ";
}
?>

आउटपुट

2 4 6 8 10

उदाहरण 3: एसोसिएटिव एरे जेनरेटर

एक एसोसिएटिव एरे को भी जेनरेटर के रूप में इम्प्लीमेंट किया जा सकता है:

<?php
function arrgenerator($arr) {
    foreach ($arr as $key => $val) {
        yield $key => $val;
    }
}

$arr = array("one" => 1, "two" => 2, "three" => 3, "four" => 4);
$gen = arrgenerator($arr);
foreach ($gen as $key => $val) {
    echo $key . "=>" . $val . "\n";
}
?>

आउटपुट

one=>1
two=>2
three=>3
four=>4

मुख्य लाभ

  • मेमोरी कुशल: पूरी सरणी मेमोरी में बनाने की आवश्यकता नहीं।
  • आलसी मूल्यांकन: मान केवल मांग पर उत्पन्न होते हैं।
  • बड़े डेटासेट्स: बड़ी फाइलें, डेटाबेस रिजल्ट्स, API पेजिनेशन के लिए आदर्श।
  • कॉम्पोजिशन: जेनरेटर्स को चेन किया जा सकता है (yield from)।

yield from (PHP 7.0+)

function combined() {
    yield from generator1();
    yield from generator2();
    yield "extra";
}
  1. - PHP log10() फ़ंक्शन - आधार-10 लघुगणक

    PHP का log10() फ़ंक्शन किसी संख्या का **आधार-10 लघुगणक (base-10 logarithm)** गणना करता है। इसे सामान्य या मानक लघुगणक भी कहते हैं। सिंटैक्स log10(float $arg): float पैरामीटर पैरामीटरविवरण $argवह संख्या जिसका आधार-10 लघुगणक चाहिए लौटाया गया मान $arg का आधार-10 लघुगणक (फ्लोट)। गणितीय संबंध l

  1. - PHP log() फ़ंक्शन - प्राकृतिक लघुगणक और मनमाना आधार

    PHP का log() फ़ंक्शन **प्राकृतिक लघुगणक (natural logarithm, आधार e)** या **निर्दिष्ट आधार** में लघुगणक गणना करता है। डिफ़ॉल्ट आधार यूलर संख्या M_E (≈2.718) है। सिंटैक्स log(float $arg, float $base = M_E): float पैरामीटर्स पैरामीटरविवरण $argवह मान जिसका लघुगणक चाहिए $baseआधार (डिफ़ॉल्ट M_E = प्

  1. - PHP is_nan() फ़ंक्शन - "नॉट अ नंबर" जांच

    PHP का is_nan() फ़ंक्शन जांचता है कि दिया गया मान **NAN (Not A Number)** है या नहीं। NAN अपरिभाषित/अप्रतिनिधित्वीय गणितीय परिणामों को दर्शाता है (जैसे sqrt(-1), acos(2), 0/0)। सिंटैक्स is_nan(float $val): bool पैरामीटर पैरामीटरविवरण $valजांचा जाने वाला मान लौटाया गया मान true यदि $val NAN ह