PHP में foreach लूप सरणियों (और ऑब्जेक्ट्स) पर पुनरावृत्ति करने का सबसे सरल और पठनीय तरीका है। यह स्वचालित रूप से लूप काउंटर, समाप्ति शर्त और पॉइंटर प्रबंधन को संभालता है।
बुनियादी सिंटैक्स
<?php
$my_arr = array("Joe", "Hannah", "Paul", "Sanna");
foreach ($my_arr as $entry) {
echo "$entry
";
}
?>
आउटपुट
Joe Hannah Paul Sanna
दो रूप
| रूप | सिंटैक्स | उपयोग |
|---|---|---|
| केवल मान | foreach ($arr as $value) | जब कुंजी की आवश्यकता न हो |
| कुंजी और मान | foreach ($arr as $key => $value) | जब कुंजी भी चाहिए |
आंतरिक कार्यप्रणाली
- आंतरिक पॉइंटर:
foreachसरणी की आंतरिक प्रति पर काम करता है (PHP 7+ में), इसलिए मूल सरणी का पॉइंटर प्रभावित नहीं होता। - कोई काउंटर नहीं:
forलूप के विपरीत, कोई$iइनिशियलाइज़ेशन, शर्त, या इन्क्रीमेंट आवश्यक नहीं। - स्वचालित समाप्ति: जब सभी तत्व पूरे हो जाते हैं, लूप स्वतः समाप्त होता है।
- कॉपी-ऑन-राइट: PHP 7 में,
foreachसरणी की प्रति पर पुनरावृत्त करता है, इसलिए लूप के अंदर सरणी संशोधन सुरक्षित है।
उन्नत उपयोग
संदर्भ द्वारा मान संशोधित करना
<?php
$arr = [1, 2, 3];
foreach ($arr as &$value) {
$value *= 2;
}
unset($value); // महत्वपूर्ण: अंतिम संदर्भ नष्ट करें
print_r($arr); // [2, 4, 6]
?>
सहयोगी सरणी पुनरावृत्ति
<?php
$person = ['name' => 'Joe', 'age' => 25, 'city' => 'NYC'];
foreach ($person as $key => $value) {
echo "$key: $value\n";
}
?>
प्रदर्शन नोट्स
foreachआमतौर परforलूप से तेज़ होता है सरणियों के लिए।- बड़ी सरणियों के लिए, संदर्भ (
&$value) का उपयोग करके कॉपी ओवरहेड बचाया जा सकता है। array_walk(),array_map()फ़ंक्शनल विकल्प हैं।
सामान्य नुकसान
- लूप के बाद
unset($value)भूलना (संदर्भ उपयोग में)। - लूप के अंदर सरणी में तत्व जोड़ना/हटाना (अप्रत्याशित व्यवहार)।
- गैर-सरणी/गैर-ट्रैवर्सेबल पर उपयोग करना (त्रुटि)।