کار با آرایه‌های چندبُعدی با استفاده از حلقهٔ foreach در زبان PHP


امروزه کمتر اپلیکیشنی را می‌توان یافت که در پیاده‌سازی آن از آرایه‌های چندبُعدی استفاده نشده باشد و وب اپلیکیشن‌ها هم از این قاعده مستثنی نیستند. در همین راستا، در این آموزش قصد داریم ببینیم که به چه شکل می‌توان در زبان PHP با استفاده از حلقهٔ foreach به کار آرایه‌های چندبُعدی پرداخت. برای این منظور، فایلی می‌سازیم تحت عنوان index.php و کدهای زیر را داخل آن می‌نویسیم:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Multidimensional Arrays</title>
    </head>
    <body>
        <?php
            $countries = [
                'Iran' => [
                    'Yazd',
                    'Ilam',
                    'Sistan Balochestan'
                ],
                'Denmark' => [
                    'North Zealand',
                    'Fyn',
                    'North Jutland'
                ]
            ]
        ?>
        <h1>Total No of Countries Is: <?= count($countries) ?></h1>
        <?php
            foreach($countries as $country => $provinces) {
                echo "<h3>$country includes:</h3>";
                foreach($provinces as $province) {
                    echo "<li>$province</li>";
                }
            }
        ?>
    </body>
</html>

چنانچه این فایل را اجرا کنیم و به سورس صفحه نگاهی بیندازیم، با خروجی زیر مواجه خواهیم شد:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>Multidimensional Arrays</title>
   </head>
   <body>
      <h1>Total No of Countries Is: 2</h1>
      <h3>Iran includes:</h3>
      <li>Yazd</li>
      <li>Ilam</li>
      <li>Sistan Balochestan</li>
      <h3>Denmark includes:</h3>
      <li>North Zealand</li>
      <li>Fyn</li>
      <li>North Jutland</li>
   </body>
</html>

همان‌طور که می‌بینیم، هیچ اثری از کدهای PHP نیست و صرفاً خروجی را به زبان HTML مشاهده می‌کنیم. حال در تفسیر کدهای فوق، باید بگوییم که ابتدا آرایه‌ای تحت عنوان countries$ ساخته‌ایم که چندبُعدی است بدین شکل که این آرایه دو کلید (Key) اصلی دارد تحت عناوین Iran و Denmark و این در حالی است که هر کدام از این کلیدها خود آرایه‌ای هستند که حاوی سه زیرشاخه‌اند.

در ادامه، با استفاده از فانکشن از پیش تعریف شده‌ای در زبان PHP تحت عنوان ()count که این وظیفه را دارا است تا تعداد کلیدهای یک آرایه را شمارش کند، در خط بیست و دومم اقدام به چاپ تعداد کل کشورهایی که در این آرایه قرار دارند کرده‌‌ایم که برابر با ۲ است.

سپس با استفاده از یک حلقهٔ foreach، اقدام به تفکیک آرایهٔ countries$ به اجزایش کرده‌ایم بدین شکل که Key و Value ذخیره شده در این آرایه را به ترتیب در متغیرهایی تحت عناوین country$ و provinces$ ذخیره کرده‌ایم. در خط بیست و پنجم، ابتدا نام کشور را چاپ کرده‌ایم و در ادامه هم با استفاده از یک foreach دیگر، اجزای زیرشاخهٔ هر کشور را به دست آورده‌ایم. به عبارت دیگر، در foreach دوم استان‌های هر کشور که در متغیر provinces$ ذخیره کرده بودیم را تک به تک در متغیری تحت عنوان province$ ذخیره کرده سپس مقدار این متغیر را داخل تگ‌های <li></li> که برای ساخت لیست در زبان HTML استفاده می‌شوند، قرار داده‌ایم. 

می‌بینیم که به چه سادگی می‌توان به داده‌های ذخیره شده در آرایه‌های چندبُعدی دست یافت. به همین منوال، می‌توان ابعاد آرایه را به مراتب بیشتر کرد که برای روشن‌تر شدن این مسئله، کدهای فوق را به صورت زیر ریفکتور می‌کنیم:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Multidimensional Arrays</title>
    </head>
    <body>
        <?php
            $countries = [
                'Iran' => [
                    'Yazd' => [
                        'Meybod',
                        'Ardekan',
                        'Hamidia'
                    ],
                    'Ilam' => [
                        'Dehloran',
                        'Ivan',
                        'Abdanan'
                    ],
                    'Sistan Balochestan' => [
                        'Zabol',
                        'Iranshahr',
                        'Chabahar'
                    ]
                ],
                'Denmark' => [
                    'North Zealand' => [
                        'Egedal',
                        'Fredensborg',
                        'Frederikssund'
                    ],
                    'Fyn' => [
                        'Assens',
                        'Faaborg',
                        'Kerteminde'
                    ],
                    'North Jutland' => [
                        'Frederikshavn',
                        'Thisted',
                        'Aalborg'
                    ]
                ]
            ]
        ?>
        <h1>Total No of Countries Is: <?= count($countries) ?></h1>
        <?php
            foreach($countries as $country => $provinces) {
                echo "<h3>$country includes:</h3>";
                foreach($provinces as $province => $cites) {
                    echo "<li>$province</li>";
                    foreach($cites as $city) {
                        echo "- $city <br>";
                    }
                }
            }
        ?>
    </body>
</html>

و به عنوان خروجی هم خواهیم داشت:

<!DOCTYPE html>
<html>
   <head>
      <meta charset="utf-8">
      <title>Multidimensional Arrays</title>
   </head>
   <body>
      <h1>Total No of Countries Is: 2</h1>
      <h3>Iran includes:</h3>
      <li>Yazd</li>
      - Meybod <br>- Ardekan <br>- Hamidia <br>
      <li>Ilam</li>
      - Dehloran <br>- Ivan <br>- Abdanan <br>
      <li>Sistan Balochestan</li>
      - Zabol <br>- Iranshahr <br>- Chabahar <br>
      <h3>Denmark includes:</h3>
      <li>North Zealand</li>
      - Egedal <br>- Fredensborg <br>- Frederikssund <br>
      <li>Fyn</li>
      - Assens <br>- Faaborg <br>- Kerteminde <br>
      <li>North Jutland</li>
      - Frederikshavn <br>- Thisted <br>- Aalborg <br>    
   </body>
</html>

آنچه به کد اضافه کرده‌ایم این است که برای هر استان سه شهر زیرشاخه در نظر گرفته‌ایم و با استفاده از foreach سوم، به تک‌تک شهرهای قرار گرفته داخل هر استان دست یافته‌ایم و می‌بینیم که به چه سادگی می‌توان در زبان PHP آرایه‌های چند لایه تعریف کرد.

دانلود فایل‌های تمرین
لیست نظرات
کاربر میهمان
دیدگاه شما چیست؟
کاربر میهمان
کاربر میهمان
کاربر میهمانمن یک کاربر مهمان هستم
آقای مرادی لطفاً ادامه بدید بقیه این آموزش رو :(