खोज…


वाक्य - विन्यास

  • for ($ i = 0; $ i <count ($ array); $ i ++) {incremental_iteration (); }
  • for ($ i = count ($ array) - 1; $ i> = 0; $ i--) {रिवर्स_ट्रीशन (); }
  • foreach ($ डेटा $ डटम के रूप में) {}
  • foreach ($ कुंजी के रूप में $ डेटा => $ डेटा) {}
  • foreach ($ डेटा के रूप में और $ datum) {}

टिप्पणियों

किसी सरणी को पुनरावृत्त करने के तरीकों की तुलना

तरीका लाभ
foreach किसी सरणी को पुन: व्यवस्थित करने की सबसे सरल विधि।
foreach संदर्भ द्वारा सरणी के तत्वों को पुनरावृत्त और बदलने के लिए सरल विधि।
for वृद्धिशील सूचकांक के साथ एक नि: शुल्क अनुक्रम में सरणी को पुनरावृत्त करने की अनुमति देता है, जैसे कई तत्वों को छोड़ना या उलटना
आंतरिक सरणी बिंदु लूप का उपयोग करना अब आवश्यक नहीं है (ताकि हर फ़ंक्शन कॉल, सिग्नल रिसीव, आदि के बाद यह पुनरावृति कर सके)

एक साथ कई सरणियों को बदलना

कभी-कभी एक ही लंबाई के दो सरणियों को एक साथ प्रसारित करने की आवश्यकता होती है, उदाहरण के लिए:

$people = ['Tim', 'Tony', 'Turanga'];
$foods = ['chicken', 'beef', 'slurm'];

array_map इसे पूरा करने का सबसे सरल तरीका है:

array_map(function($person, $food) {
    return "$person likes $food\n";
}, $people, $foods);

जो उत्पादन करेगा:

Tim likes chicken
Tony likes beef
Turanga likes slurm

यह एक सामान्य सूचकांक के माध्यम से किया जा सकता है:

assert(count($people) === count($foods));
for ($i = 0; $i < count($people); $i++) {
    echo "$people[$i] likes $foods[$i]\n";
}

यदि दो सरणियों में वृद्धिशील कुंजियाँ नहीं हैं, तो array_values($array)[$i] का उपयोग $array[$i] को बदलने के लिए किया जा सकता है।

यदि दोनों सरणियों में कुंजियों का क्रम समान है, तो आप सरणियों में से किसी एक पर foreach-with-key लूप का भी उपयोग कर सकते हैं:

foreach ($people as $index => $person) {
    $food = $foods[$index];
    echo "$person likes $food\n";
}

अलग-अलग सरणियों के माध्यम से केवल लूप किया जा सकता है यदि वे एक ही लंबाई के हैं और एक ही कुंजी नाम भी है। इसका मतलब यह है कि यदि आप एक कुंजी की आपूर्ति नहीं करते हैं और उन्हें क्रमांकित किया जाता है, तो आप ठीक हो जाएंगे, या यदि आप कुंजियों का नाम रखेंगे और उन्हें प्रत्येक क्रम में एक ही क्रम में रखेंगे।

आप array_combine भी उपयोग कर सकते हैं।

$combinedArray = array_combine($people, $foods);
// $combinedArray = ['Tim' => 'chicken', 'Tony' => 'beef', 'Turanga' => 'slurm'];

फिर आप पहले के समान कार्य करके इसे लूप कर सकते हैं:

foreach ($combinedArray as $person => $meal) {
    echo "$person likes $meal\n";
}

वृद्धिशील सूचकांक का उपयोग करना

यह विधि 0 से पूर्णांक को सरणी में सबसे बड़े सूचकांक में बढ़ाकर काम करती है।

$colors = ['red', 'yellow', 'blue', 'green'];
for ($i = 0; $i < count($colors); $i++) {
    echo 'I am the color ' . $colors[$i] . '<br>';
}

यह array_reverse का उपयोग किए बिना किसी सरणी को रिवर्स ऑर्डर में पुनरावृत्त करने की अनुमति देता है, जिसके परिणामस्वरूप सरणी बड़ी होने पर ओवरहेड हो सकता है।

$colors = ['red', 'yellow', 'blue', 'green'];
for ($i = count($colors) - 1; $i >= 0; $i--) {
    echo 'I am the color ' . $colors[$i] . '<br>';
}

आप इस विधि का उपयोग करके आसानी से सूचकांक को छोड़ या रिवाइंड कर सकते हैं।

$array = ["alpha", "beta", "gamma", "delta", "epsilon"];
for ($i = 0; $i < count($array); $i++) {
    echo $array[$i], PHP_EOL;
    if ($array[$i] === "gamma") {
        $array[$i] = "zeta";
        $i -= 2;
    } elseif ($array[$i] === "zeta") {
        $i++;
    }
}

आउटपुट:

alpha
beta
gamma
beta
zeta
epsilon

उन सरणियों के लिए, जिनमें वृद्धिशील सूचकांक नहीं हैं (रिवर्स ऑर्डर में सूचकांकों के साथ सरणियाँ, जैसे [1 => "foo", 0 => "bar"] , ["foo" => "f", "bar" => "b"] ), यह सीधे नहीं किया जा सकता है। इसके बजाय array_values या array_keys का उपयोग किया जा सकता है:

$array = ["a" => "alpha", "b" => "beta", "c" => "gamma", "d" => "delta"];
$keys = array_keys($array);
for ($i = 0; $i < count($array); $i++) {
    $key = $keys[$i];
    $value = $array[$key];
    echo "$value is $key\n";
}

आंतरिक सरणी बिंदुओं का उपयोग करना

प्रत्येक सरणी उदाहरण में एक आंतरिक पॉइंटर होता है। इस सूचक में हेरफेर करके, सरणी के विभिन्न तत्वों को अलग-अलग समय पर एक ही कॉल से पुनर्प्राप्त किया जा सकता है।

each का उपयोग करना

प्रत्येक कॉल each() वर्तमान सरणी तत्व की कुंजी और मूल्य देता है, और आंतरिक सरणी सूचक को बढ़ाता है।

$array = ["f" => "foo", "b" => "bar"];
while (list($key, $value) = each($array)) {
    echo "$value begins with $key";
}

next का उपयोग करना

$array = ["Alpha", "Beta", "Gamma", "Delta"];
while (($value = next($array)) !== false) {
    echo "$value\n";
}

ध्यान दें कि यह उदाहरण मानता है कि सरणी में कोई तत्व बूलियन false समान नहीं है। इस तरह की धारणा को रोकने के लिए, यह जांचने के लिए कि आंतरिक सूचक सरणी के अंत तक पहुँच गया है, key का उपयोग करें:

$array = ["Alpha", "Beta", "Gamma", "Delta"];
while (key($array) !== null) {
    echo current($array) . PHP_EOL;
    next($array);
}

यह भी एक सीधा लूप के बिना एक सरणी पुनरावृत्ति की सुविधा:

class ColorPicker {
    private $colors = ["#FF0064", "#0064FF", "#64FF00", "#FF6400", "#00FF64", "#6400FF"];
    public function nextColor() : string {
        $result = next($colors);
        // if end of array reached
        if (key($colors) === null) {
            reset($colors);
        }
        return $result;
    }
}

फोरच का उपयोग करना

प्रत्यक्ष पाश

foreach ($colors as $color) {
    echo "I am the color $color<br>";
}

चाबी से लूप

$foods = ['healthy' => 'Apples', 'bad' => 'Ice Cream'];
foreach ($foods as $key => $food) {
    echo "Eating $food is $key";
}

संदर्भ द्वारा लूप

उपरोक्त उदाहरणों में foreach लूप्स में, मान ( $color या $food ) को सीधे संशोधित करने से सरणी में इसका मान नहीं बदलता है। & ऑपरेटर की आवश्यकता है ताकि मान सरणी में तत्व के लिए एक संदर्भ सूचक हो।

$years = [2001, 2002, 3, 4];
foreach ($years as &$year) {
    if ($year < 2000) $year += 2000;
}

यह निम्न के समान है:

$years = [2001, 2002, 3, 4];
for($i = 0; $i < count($years); $i++) { // these two lines
    $year = &$years[$i];                // are changed to foreach by reference
    if($year < 2000) $year += 2000;
}

संगामिति

PHP सरणियों को समसामयिक समस्याओं के बिना पुनरावृत्ति के दौरान किसी भी तरीके से संशोधित किया जा सकता है (उदाहरण के लिए जावा List एस के विपरीत)। यदि सरणी को संदर्भ द्वारा पुनरावृत्त किया जाता है, तो बाद में पुनरावृत्तियों सरणी में परिवर्तन से प्रभावित होंगे। अन्यथा, सरणी में परिवर्तन बाद के पुनरावृत्तियों को प्रभावित नहीं करेगा (जैसे कि आप इसके बजाय सरणी की प्रतिलिपि पुनरावृत्त कर रहे हैं)। मूल्य द्वारा पाशन की तुलना करें:

$array = [0 => 1, 2 => 3, 4 => 5, 6 => 7];
foreach ($array as $key => $value) {
    if ($key === 0) {
        $array[6] = 17;
        unset($array[4]);
    }
    echo "$key => $value\n";
}

आउटपुट:

0 => 1
2 => 3
4 => 5
6 => 7

लेकिन अगर सरणी को संदर्भ के साथ पुनरावृत्त किया जाता है,

$array = [0 => 1, 2 => 3, 4 => 5, 6 => 7];
foreach ($array as $key => &$value) {
    if ($key === 0) {
        $array[6] = 17;
        unset($array[4]);
    }
    echo "$key => $value\n";
}

आउटपुट:

0 => 1
2 => 3
6 => 17

4 => 5 का कुंजी-मूल्य सेट अब पुनरावृत्त नहीं है, और 6 => 7 को 6 => 17 बदल दिया गया है।

ArrayObject Iterator का उपयोग करना

PHP और ऑब्जेक्ट्स पर पुनरावृत्ति करते हुए php arrayiterator आपको मूल्यों को संशोधित और परेशान करने की अनुमति देता है।

उदाहरण:

$array = ['1' => 'apple', '2' => 'banana', '3' => 'cherry'];

$arrayObject = new ArrayObject($array);

$iterator = $arrayObject->getIterator();

for($iterator; $iterator->valid(); $iterator->next()) {
    echo $iterator->key() . ' => ' . $iterator->current() . "</br>";
}

आउटपुट:

1 => apple
2 => banana
3 => cherry


Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow