در PHP، حلقهها برای اجرای مکرر مجموعهای از دستورات استفاده میشوند. این حلقهها از سادهترین حالت تا پیچیدهترین ترکیبها میتوانند پیادهسازی شوند. در ادامه، انواع حلقهها و مثالهای مرتبط با آنها توضیح داده شدهاند.
1. حلقه `while`
این حلقه تا زمانی که شرط صحیح باشد، اجرا میشود.
<?php $count = 1; while ($count <= 5) { echo "Count: $count<br>"; $count++; } ?>
توضیح:
– شرط در ابتدای هر دور بررسی میشود.
– اگر شرط صحیح باشد، بلوک کد اجرا میشود.
2. حلقه `do-while`
این حلقه حداقل یک بار اجرا میشود و سپس شرط بررسی میشود.
<?php $count = 1; do { echo "Count: $count<br>"; $count++; } while ($count <= 5); ?>
توضیح در مورد کد:
– بلوک کد حداقل یک بار اجرا میشود، حتی اگر شرط از ابتدا غلط باشد.
3. حلقه `for`
این حلقه برای اجرای تعداد مشخصی از تکرارها استفاده میشود.
<?php for ($i = 1; $i <= 5; $i++) { echo "Iteration: $i<br>"; } ?>
توضیح در مورد کد:
– مقداردهی اولیه، شرط و افزایش/کاهش متغیر در یک خط مشخص میشوند.
4. حلقه `foreach`
برای پیمایش آرایهها و کار با مقادیر یا کلیدها استفاده میشود.
<?php $colors = ["Red", "Green", "Blue"]; foreach ($colors as $color) { echo "Color: $color<br>"; } ?>
توضیح در مورد کد:
– مقدار هر عنصر آرایه در متغیر `$color` ذخیره شده و کد اجرا میشود.
5. ترکیب حلقهها
میتوانید یک حلقه را داخل حلقه دیگر قرار دهید (Nested Loops).
<?php for ($i = 1; $i <= 3; $i++) { echo "Outer loop iteration $i:<br>"; for ($j = 1; $j <= 2; $j++) { echo "-- Inner loop iteration $j<br>"; } } ?>
توضیح در مورد کد:
– حلقه داخلی در هر بار اجرای حلقه بیرونی، چندین بار اجرا میشود.
6. استفاده از `break` برای خروج از حلقه
برای متوقف کردن حلقه پیش از پایان شرط.
<?php for ($i = 1; $i <= 10; $i++) { if ($i == 5) { break; } echo "Iteration: $i<br>"; } ?>
توضیح در مورد کد:
– وقتی مقدار `$i` برابر با 5 میشود، حلقه متوقف میشود.
7. استفاده از `continue` برای رد کردن یک دور از حلقه
برای رد کردن ادامه اجرای حلقه و رفتن به دور بعدی.
<?php for ($i = 1; $i <= 5; $i++) { if ($i == 3) { continue; } echo "Iteration: $i<br>"; } ?>
توضیح در مورد کد:
– وقتی مقدار `$i` برابر با 3 میشود، دستور بعد از `continue` اجرا نمیشود و به دور بعدی میرود.
8. حلقه `foreach` با کلید و مقدار
برای کار با آرایههای وابسته به کلید.
<?php $person = ["name" => "John", "age" => 30, "city" => "New York"]; foreach ($person as $key => $value) { echo "$key: $value<br>"; } ?>
توضیح در مورد کد:
– کلید و مقدار در متغیرهای `$key` و `$value` ذخیره میشوند.
9. حلقه بینهایت (Infinite Loop)
زمانی که شرط همیشه درست باشد، حلقه تا زمان توقف دستی ادامه پیدا میکند.
<?php $count = 1; while (true) { echo "Count: $count<br>"; $count++; if ($count > 5) { break; // جلوگیری از حلقه بینهایت } } ?>
10. حلقههای پیچیده با شرایط ترکیبی
ترکیب شرطهای منطقی در حلقهها.
<?php for ($i = 1; $i <= 10; $i++) { if ($i % 2 == 0 && $i % 3 == 0) { echo "Number divisible by 2 and 3: $i<br>"; } } ?>
توضیح در مورد کد:
– شرط بررسی میکند که عدد همزمان بر 2 و 3 بخشپذیر باشد.
نکات مهم:
1. انتخاب حلقه مناسب:
– برای تکرار مشخص از `for` استفاده کنید.
– برای آرایهها `foreach` مناسب است.
– برای شرایط پویا از `while` یا `do-while` استفاده کنید.
2. خوانایی کد: از نامگذاری مناسب برای متغیرها و استفاده صحیح از تورفتگیها استفاده کنید.
3. حلقه بینهایت: همیشه شرطی برای جلوگیری از حلقه بینهایت قرار دهید.
در ادامه، مثالهای بیشتری از انواع حلقهها در PHP ارائه شده است. این مثالها شامل موارد پیچیدهتر و ترکیبی هستند که در سناریوهای مختلف کاربرد دارند.
1. حلقه `while` با آرایه و شرط ترکیبی
این حلقه یک آرایه را پیمایش میکند و شرطهای ترکیبی را اعمال میکند.
<?php $numbers = [1, 2, 3, 4, 5, 6, 7]; $index = 0; while ($index < count($numbers)) { if ($numbers[$index] % 2 == 0) { echo "Even number: {$numbers[$index]}<br>"; } else { echo "Odd number: {$numbers[$index]}<br>"; } $index++; } ?>
2. حلقههای تو در تو برای جدول ضرب
این حلقه تو در تو، یک جدول ضرب ایجاد میکند.
<?php for ($i = 1; $i <= 10; $i++) { for ($j = 1; $j <= 10; $j++) { echo "$i x $j = " . ($i * $j) . "<br>"; } echo "<hr>"; } ?>
3. حلقه `foreach` با شرطهای پیچیده
پیمایش یک آرایه وابسته به کلید و اعمال شرط روی مقادیر.
<?php $students = [ "John" => 85, "Alice" => 92, "Bob" => 74, "Emma" => 58 ]; foreach ($students as $name => $score) { if ($score >= 90) { echo "$name: Excellent<br>"; } elseif ($score >= 75) { echo "$name: Good<br>"; } else { echo "$name: Needs Improvement<br>"; } } ?>
4. حلقه بینهایت برای پردازش داده
یک حلقه بینهایت که از ورودی کاربر استفاده میکند.
<?php while (true) { $input = readline("Enter a number (type 'exit' to quit): "); if ($input === "exit") { break; } echo "You entered: $input<br>"; } ?>
5. حلقه با استفاده از بازگشت (`continue`)
نمایش اعداد به جز موارد خاص.
<?php for ($i = 1; $i <= 10; $i++) { if ($i % 3 == 0) { continue; // از اعداد مضرب 3 عبور میکند } echo "Number: $i<br>"; } ?>
6. پیمایش چندین آرایه با یک حلقه تو در تو
حلقه برای پیمایش چند آرایه همزمان.
<?php $names = ["John", "Alice", "Bob"]; $scores = [85, 92, 74]; for ($i = 0; $i < count($names); $i++) { echo "{$names[$i]} scored {$scores[$i]}<br>"; } ?>
7. ایجاد مثلث با استفاده از حلقه
ایجاد یک مثلث ستارهای.
<?php $rows = 5; for ($i = 1; $i <= $rows; $i++) { for ($j = 1; $j <= $i; $j++) { echo "*"; } echo "<br>"; } ?>
8. حلقه `foreach` تو در تو برای آرایه چندبعدی
پیمایش آرایه چندبعدی با استفاده از `foreach`.
<?php $products = [ "Electronics" => ["TV", "Laptop", "Phone"], "Furniture" => ["Sofa", "Table", "Chair"], "Clothing" => ["Shirt", "Pants", "Jacket"] ]; foreach ($products as $category => $items) { echo "$category:<br>"; foreach ($items as $item) { echo "- $item<br>"; } echo "<hr>"; } ?>
9. ترکیب حلقه و شرط برای پیدا کردن عدد اول
پیدا کردن اعداد اول بین 1 تا 50.
<?php for ($i = 2; $i <= 50; $i++) { $isPrime = true; for ($j = 2; $j <= sqrt($i); $j++) { if ($i % $j == 0) { $isPrime = false; break; } } if ($isPrime) { echo "$i is a prime number<br>"; } } ?>
10. حلقههای ترکیبی برای ساخت الگوهای پیشرفته
ایجاد یک الگوی پیچیده.
<?php $rows = 5; for ($i = 1; $i <= $rows; $i++) { for ($j = 1; $j <= $rows - $i; $j++) { echo " "; } for ($k = 1; $k <= (2 * $i - 1); $k++) { echo "*"; } echo "<br>"; } ?>
11. پیمایش فایل با حلقه `while`
خواندن خطوط یک فایل.
<?php $file = fopen("example.txt", "r"); while (($line = fgets($file)) !== false) { echo $line . "<br>"; } fclose($file); ?>
12. حلقه برای پردازش API با محدودیت تکرار
مثال استفاده از حلقه برای ارسال درخواستهای API با شرط توقف.
<?php $requests = 0; $maxRequests = 5; while ($requests < $maxRequests) { echo "Processing request #" . ($requests + 1) . "<br>"; $requests++; sleep(1); // تاخیر 1 ثانیهای } ?>
نکات کلیدی:
1. مدیریت پیچیدگی: از نامگذاری مناسب متغیرها برای خوانایی بیشتر استفاده کنید.
2. بهینهسازی حلقهها: حلقههای تو در تو را فقط در صورت نیاز استفاده کنید؛ این نوع حلقهها ممکن است عملکرد را تحت تأثیر قرار دهند.
3. شرایط توقف: همیشه شرایط توقف مناسب را تعریف کنید تا از حلقههای بینهایت جلوگیری شود.
در اینجا مثالهای پیچیدهتر و کاربردیتری از حلقهها در PHP ارائه شده است که شامل سناریوهای پیشرفته و ترکیبی هستند.
1. پیمایش آرایه چندبعدی و مرتبسازی مقادیر
این مثال شامل پیمایش آرایه چندبعدی، مرتبسازی و چاپ نتایج است.
<?php $data = [ ["name" => "John", "score" => 85], ["name" => "Alice", "score" => 92], ["name" => "Bob", "score" => 74] ]; // مرتبسازی آرایه بر اساس امتیاز usort($data, function ($a, $b) { return $b['score'] - $a['score']; }); // چاپ دادهها foreach ($data as $item) { echo "Name: {$item['name']}, Score: {$item['score']}<br>"; } ?>
2. حلقههای تو در تو برای حل ماتریس
ضرب دو ماتریس با استفاده از حلقههای تو در تو.
<?php $matrix1 = [ [1, 2], [3, 4] ]; $matrix2 = [ [5, 6], [7, 8] ]; $result = []; for ($i = 0; $i < count($matrix1); $i++) { for ($j = 0; $j < count($matrix2[0]); $j++) { $result[$i][$j] = 0; for ($k = 0; $k < count($matrix2); $k++) { $result[$i][$j] += $matrix1[$i][$k] * $matrix2[$k][$j]; } } } // چاپ ماتریس نتیجه foreach ($result as $row) { echo implode(" ", $row) . "<br>"; } ?>
3. ایجاد یک درخت با دادههای سلسلهمراتبی
پیمایش دادههای سلسلهمراتبی برای ایجاد یک ساختار درختی.
<?php $data = [ ["id" => 1, "parent_id" => 0, "name" => "Electronics"], ["id" => 2, "parent_id" => 1, "name" => "Laptops"], ["id" => 3, "parent_id" => 1, "name" => "Phones"], ["id" => 4, "parent_id" => 2, "name" => "Gaming Laptops"], ["id" => 5, "parent_id" => 2, "name" => "Business Laptops"] ]; // تابع بازگشتی برای ساخت درخت function buildTree($data, $parentId = 0) { $tree = []; foreach ($data as $item) { if ($item['parent_id'] == $parentId) { $children = buildTree($data, $item['id']); if ($children) { $item['children'] = $children; } $tree[] = $item; } } return $tree; } // چاپ درخت function printTree($tree, $level = 0) { foreach ($tree as $branch) { echo str_repeat("--", $level) . $branch['name'] . "<br>"; if (!empty($branch['children'])) { printTree($branch['children'], $level + 1); } } } $tree = buildTree($data); printTree($tree); ?>
4. پیمایش فایل CSV و پردازش دادهها
خواندن دادههای یک فایل CSV و انجام پردازش روی آن.
<?php $file = fopen("data.csv", "r"); $headers = fgetcsv($file); while (($row = fgetcsv($file)) !== false) { $data[] = array_combine($headers, $row); } fclose($file); // نمایش دادهها foreach ($data as $entry) { echo "Name: {$entry['Name']}, Age: {$entry['Age']}, City: {$entry['City']}<br>"; } ?>
5. حلقه برای تولید گزارش از دادههای پویا
ایجاد گزارش از دادههای یک جدول پایگاه داده (شبیهسازیشده).
<?php $records = [ ["name" => "John", "sales" => 1200], ["name" => "Alice", "sales" => 1500], ["name" => "Bob", "sales" => 800], ["name" => "Emma", "sales" => 1900] ]; // تولید گزارش $totalSales = 0; echo "<table border='1'>"; echo "<tr><th>Name</th><th>Sales</th></tr>"; foreach ($records as $record) { echo "<tr><td>{$record['name']}</td><td>{$record['sales']}</td></tr>"; $totalSales += $record['sales']; } echo "<tr><td>Total</td><td>$totalSales</td></tr>"; echo "</table>"; ?>
6. حلقه برای تجزیه JSON و نمایش دادهها
پردازش دادههای JSON و نمایش نتایج.
<?php $json = '[ {"name": "John", "age": 30, "skills": ["PHP", "JavaScript"]}, {"name": "Alice", "age": 25, "skills": ["Python", "Django"]}, {"name": "Bob", "age": 35, "skills": ["Java", "Spring"]} ]'; $data = json_decode($json, true); foreach ($data as $person) { echo "Name: {$person['name']}, Age: {$person['age']}<br>"; echo "Skills: " . implode(", ", $person['skills']) . "<br><br>"; } ?>
7. پردازش فایلهای یک پوشه با حلقه
لیست کردن و پردازش فایلهای موجود در یک پوشه.
<?php $directory = "uploads/"; if (is_dir($directory)) { $files = scandir($directory); foreach ($files as $file) { if ($file !== "." && $file !== "..") { echo "Processing file: $file<br>"; } } } else { echo "Directory does not exist."; } ?>
8. حلقه برای پردازش دادههای API
ارسال درخواست به یک API و پردازش پاسخها.
<?php $urls = [ "https://api.example.com/data1", "https://api.example.com/data2", "https://api.example.com/data3" ]; foreach ($urls as $url) { $response = file_get_contents($url); $data = json_decode($response, true); echo "Data from $url:<br>"; print_r($data); echo "<br><br>"; } ?>
9. تولید دادههای تصادفی و محاسبات
ایجاد لیستی از دادههای تصادفی و انجام محاسبات.
<?php $numbers = []; for ($i = 0; $i < 10; $i++) { $numbers[] = rand(1, 100); } echo "Generated Numbers: " . implode(", ", $numbers) . "<br>"; echo "Max: " . max($numbers) . "<br>"; echo "Min: " . min($numbers) . "<br>"; echo "Average: " . array_sum($numbers) / count($numbers) . "<br>"; ?>
10. تبدیل دادههای XML به HTML با حلقه
تجزیه XML و نمایش آن به صورت جدول HTML.
<?php $xml = ' <books> <book> <title>PHP for Beginners</title> <author>John Doe</author> <price>29.99</price> </book> <book> <title>Advanced PHP</title> <author>Jane Smith</author> <price>39.99</price> </book> </books>'; $books = new SimpleXMLElement($xml); echo "<table border='1'>"; echo "<tr><th>Title</th><th>Author</th><th>Price</th></tr>"; foreach ($books->book as $book) { echo "<tr>"; echo "<td>{$book->title}</td>"; echo "<td>{$book->author}</td>"; echo "<td>\${$book->price}</td>"; echo "</tr>"; } echo "</table>"; ?>