← Back to PHP Course | Chapter 4: Control Flow | Lesson 13 of 14

PHP foreach Loop

एक foreach loop किसी shelf पर चलते हुए एक-एक करके हर item उठाने जैसा है। यह आपको list के हर item देता है बिना आपको positions गिनने की ज़रूरत के।
Syntax
php
foreach ($array as $value) {
    // use $value
}

foreach ($array as $key => $value) {
    // use $key and $value
}

एक foreach Loop क्या है?

foreach loop किसी array के हर element में manually एक index track किए बिना चलने के लिए PHP का dedicated tool है।

जहाँ एक for loop आपसे खुद एक counter और bounds manage करने की माँग करता है, foreach आपको हर value सीधे देता है, यही वजह है कि जब goal सिर्फ "हर item के लिए यह करो" हो तो यह वह loop है जिस तक PHP developers सबसे पहले पहुँचते हैं।

उदाहरण: What is a foreach Loop?

php
<?php
// Declare `$fruits` as an array: `["apple", "banana", "cherry"]`
$fruits = ["apple", "banana", "cherry"];
// Loop over `$fruits`, binding each item to `$fruit`
foreach ($fruits as $fruit) {
    // Print `$fruit . "\n"` to the output
    echo $fruit . "\n";
}
?>

Keys और Values के साथ Loop चलाना

foreach ($array as $key => $value) लिखना आपको हर pass पर array key और उसकी value दोनों देता है, जो associative arrays के लिए बहुत मायने रखता है जहाँ key कोई real meaning carry करती है — एक username, एक product ID, एक config option name।

=> $value form के बिना आपको सिर्फ values दिखेंगी और यह context पूरी तरह खो जाएगा।

उदाहरण: Looping With Keys and Values

php
<?php
// Declare `$config` as an array: `["theme" => "dark", "lang" => "en"]`
$config = ["theme" => "dark", "lang" => "en"];
// Loop over `$config`, binding each item to `$key => $value`
foreach ($config as $key => $value) {
    // Print "$key: $value\n" to the output
    echo "$key: $value\n";
}
?>

Reference से Values Modify करना

एक ampersand add करना, foreach ($array as &$value), $value को original array में एक copy के बजाय एक reference बना देता है, इसलिए loop body के अंदर आप जो changes करते हैं वे असल में array को खुद update कर देते हैं।

यह एक foreach pass के दौरान array elements को in place modify करने का इकलौता built-in तरीका है।

उदाहरण: Modifying Values by Reference

php
<?php
// Declare `$numbers` as an array: `[1, 2, 3]`
$numbers = [1, 2, 3];
// Loop over `$numbers`, binding each item to `&$value`
foreach ($numbers as &$value) {
    $value *= 2;
}
// Remove `$value`
unset($value);
// Print a human-readable dump of `$numbers`
print_r($numbers);
?>

Dangling Reference Pitfall

एक by-reference foreach खत्म होने के बाद, $value अभी भी array के last element को point करता है — बाद में एक different, non-reference foreach में उसी variable name को reuse करना चुपचाप उस last element को unrelated data से overwrite कर सकता है।

Fix reference loop खत्म होते ही एक single unset($value); है, और इसे skip करना PHP के सबसे common array bugs में से एक है।

उदाहरण: The Dangling Reference Pitfall

php
<?php
$numbers = [1, 2, 3];
foreach ($numbers as &$value) {
    $value *= 2;
}
unset($value); // without this, the next foreach below would corrupt the last element
foreach ($numbers as $value) {
    echo $value . "\n";
}
?>

Nested और Multidimensional Arrays के साथ foreach

एक foreach को दूसरे के अंदर nest करना किसी multidimensional array में चलने का natural तरीका है, जैसे data की rows represent करने वाली associative arrays की एक list — outer loop आपको हर row देता है, और एक inner loop या direct key access उस row के individual fields पढ़ता है।

उदाहरण: foreach With Nested and Multidimensional Arrays

php
<?php
$rows = [
    ["name" => "Alice", "age" => 30],
    ["name" => "Bob", "age" => 25],
];
// Loop over `$rows`, binding each item to `$row`
foreach ($rows as $row) {
    // Print `$row["name"] . " is " . $row["age"] . "\n"` to the output
    echo $row["name"] . " is " . $row["age"] . "\n";
}
?>
Related Topics
{# common_mistakes/chapter_summary/browser_support: on Hindi pages the view already swaps in the hi_ translation fields (or blanks these out if untranslated), so this renders correctly for both languages without a lang_code check here. #}
आम गलतियां
  1. foreach के अंदर $value को modify करना और array के बदलने की उम्मीद करना, जबकि default रूप से यह एक copy है; in place modify करने के लिए &$value इस्तेमाल करें।
  2. एक by-reference foreach variable को alive छोड़ देना और इसे बाद के एक loop में reuse करना, जो array के last element को overwrite कर देता है।
  3. किसी array पर loop चलाते हुए इसकी keys modify करना या elements add करना, जो unexpected results देता है क्योंकि foreach default रूप से एक copy पर काम करता है।

Login to run this code

C/C++/Java/PHP execution requires a free account. Your code is saved — you'll land right back in the editor after logging in.