تعریف آرایه ها در پی اچ پی

آرایه همانند متغیرها به نامی گفته می شود که به فضایی از آدرس حافظه اشاره دارد ولی با این تفاوت که در آرایه ها می توان توالی از عصنرهای مشابه (هم نوع) یا غیر مشابه (غیر هم نوع) را ایجاد کرد. در پی اچ پی آرایه ها در دو دسته آرایه های معمولی و آرایه های انجمنی (Association Array) وجود دارند.

هر عنصر (المان) درون آرایه های معمولی دارای یک اندیس عددی است که از عدد صفر شروع می شود. به عبارت دیگر اولین عنصر درون آرایه دارای اندیس 0، دومین عنصر آرایه دارای اندیس 1، سومین عنصر درون آرایه دارای اندیس 2 است تا آخرین عنصر آرایه که عدد اندیس آن یکی کمتر از طول آرایه است. به طور مثال اگر آرایه ای دارای ۱۰۰۰ عنصر باشد، پس اندیس آخرین عنصر برابر با عدد ۹۹۹ است.

برای تعریف آرایه های معمولی می توانیم عناصر را میان براکت های باز و بسته قرار داده و سپس آنرا به نام متغیر انتساب دهیم و یا اینکه از تابعی به نام ()array صراحتا برای تعریف آرایه استفاده شود. در کدهای زیر ابتدا دو آرایه خالی به نام های array1$ و array2$ ایجاد می شود. سپس دو آرایه با ۵ عنصر عددی به نام های array3$ و array4$ ایجاد کرده ایم.

به عنوان مثال در کد زیر آرایه ای متشکل از انواع متفاوت داده در پی اچ پی تعریف شده و سپس درون یک حلقه for شماره اندیس و خود عنصر و نوع آن نشان داده شده است. توجه کنید که تابع echo برای نمایش خروجی بر روی صفحه وب استفاده شده است و همچنین از کاراکتر نقطه، برای اتصال بخش های خروجی تابع ()gettype به دنباله رشته استفاده شده است.

برای درک بهتر کد بالا را به صورت موارد زیر توضیح داده ایم

۱ – از حلقه for برای تکرار روی آرایه و نمایش هر کدام از عنصرهای آن استفاده شده است. شمارنده حلقه یعنی متغیر i$ با عدد صفر شروع می شود سپس یکی یکی به آن اضافه شده و تا زمانی ادامه پیدا می کند که عدد متغیر i$ کوچکتر از اندازه آرایه باشد. برای بدست آوردن اندازه آرایه نیز از تابع ()count استفاده کرده ایم. تابع ()count  می توند یک نوع رشته ای را دریافت کند و سپس تعداد کاراکترهای آنرا برگشت دهد و یا اینکه می تواند یک آرایه دریافت کند و سپس تعداد عنصرهای آنرا برگشت دهد.

۲ – برای دسترسی به عنصرهای درون آرایه، از شماره اندیس آن استفاده شده است.

۳ – اگر بخواهید مقدار متغیری را درون یک رشته ایجاد شده توسط کاراکترهای ” ” نشان دهید، می توانید نام متغیر را درون آکولادهای باز و بسته مانند خط ۶ از کد بالا یا مانند خط ۱ از کد زیر قرار دهید. اما اگر رشته با کاراکترهای ‘ ‘ ایجاد شده باشد، پس دیگر راهی برای نمایش مقدار متغیر وجود ندارد، بلکه در این صورت خود نام متغیر به جای مقدارش نمایش داده می شود.

۴ – برای نمایش نوع متغیر از تابع ()gettype استفاده شده است. توجه کنید که به هیچ عنوان نمی توانید یک تابع را درون یک رشته فراخوانی کنید.

۵ – خروجی تابع ()gettype از نوع رشته است، چون نمی توانیم توابع را درون رشته ها فراخوانی کنیم، در عوض می توانیم توسط عملگر نقطه (تک نقطه) خروجی تابع یا هر رشته و محتوای دیگری مانند عدد را به انتهای یک رشته دیگر اتصال دهیم.

تعریف آرایه های انجمنی

آرایه های انجمنی (Association Array) گونه دیگری از آرایه ها هستند که اندیس های آن که کلید (Key) نیز گفته می شود، لزومی ندارد که حتما عددی باشند بلکه اندیس (کلید) می تواند از هر نوعی به ویژه رشته ها باشند. در کدهای زیر دو روش ایجاد دو آرایه انجمنی نشان داده شده است که هر کدام دارای سه کلید و مقدار انتسابی از نوع های متفاوت است.

بنابراین هر عنصر درون آرایه انجمنی به صورت دوتایی key => value است. برای دسترسی به مقدار هر عنصر، باید از نام کلید و به صورت زیر استفاده کنید. در کدهای زیر می خواهیم به مقدار کلید name و age از دو آرایه بالا دسترسی پیدا کنیم.

از حلقه for نیز می توانیم برای تکرار بر روی عصنرهای آرایه انجمنی مانند کد زیر استفاده کنیم. در کد زیر یک آرایه معمولی به نام people$ ایجاد کرده ایم که هر عنصر آن یک آرایه انجمنی است. توجه کنید آرایه بیرونی به صورت آرایه معمولی و آرایه های درونی به صورت آرایه های انجمنی هستند که هر کدام دو کلید به نام name و salt دارند. کد زیر دارای چندین نکته است که آنها را در ادامه فهرست کرده ایم.

۱ – می خواهیم مقدار کلید  saltهر آرایه انجمنی درونی را نشان دهیم و چون آرایه به صورت آرایه های تو در تو است، پس باید از دو اندیس استفاده شود. چون آرایه بیرونی از نوع آرایه های معمولی هستند، پس در دسترسی به هر عنصر آن باید از اندیس عددی متغیر i$ استفاده شود که هر کدام از آرایه های درونی در دسترس خواهند بود و سپس برای دسترسی به کلید salt هر آرایه انجمنی، اندیس دوم کلید salt خواهد بود.

۲ – درون بدنه حلقه for مقدار جدیدی به هر کدام از کلیدهای salt انتساب داده شده است. این انتساب در مثال بالا توسط تابع ()mt_rand انجام می شود. تابع ()mt_rand برای ایجاد عدد های تصادفی استفاده می شود. بنابراین برای انتساب مقدار جدید به عضوی از آرایه های معمولی یا آرایه های انجمنی، باید از طریق شماره اندیس آن مقدار جدید را به صورت های زیر انتساب دهیم. در حالت اول مقدار عنصر سوم (اندیس شماره 2) از آرایه معمولی تغییر می کند و در حالت دوم مقدار کلید age از آرایه انجمنی تغییر کرده است.

حلقه تکرار foreach در پی اچ پی

حلقه foreach یکی از ویژگی های بسیار خوب در پی اچ پی است که با داشتن دو الگوی زیر، می توانیم از آن برای پیمایش عنصرهای آرایه های معمولی و انجمنی استفاده کنیم. توجه کنید متغیر پیش از عبارت as باید نام یک آرایه باشد و سپس در گام از پیمایش آرایه، هر عنصر آن درون متغیر دلخواهی مثلا به نام value$ ریخته می شود.

در الگوی اول هر value مقدار هر کلید درون آرایه است که آرایه می تواند به صورت معمولی یا انجمنی باشد. در حالت دوم، پس از عبارت as دوتایی (زوج) key و value وجود دارد که فرمت عنصرهای آرایه انجمنی یعنی key => value را دارد. در واقع در الگوی دوم در پیمایش آرایه به کلید ها نیز دسترسی داریم. توجه کنید در آرایه های معمولی، کلید ها همان اندیس های عددی (شماره اندیس) هستند.

در پی اچ پی تعدادی متغیرها و آرایه های از پیش تعریف شده وجود دارند که هر کدام دارای کاربرد خاص خودشان هستند. در مطلب های پیش رو این آرایه های سراسری (Global Arary) را معرفی کرده ایم و سپس در مطلب های خاص، در مورد هر یک و شیوه استفاده از آنها صحبت شده است. همچنین آرایه ها و به ویژه آرایه های انجمنی در مبحث های پایگاه داده ها بسیار کاربرد دارند و خواهید دید ترکیب آرایه ها در کنار حلقه foreach بسیار کاربردی خواهند بود.

جمع بندی

در این مطلب روش های ایجاد آرایه های معمولی و انجمنی گفته شد و توضیح دادیم که اندیس های آرایه های انجمنی می توانند غیر از عددها باشند. به طور مثال اندیس یا کلیدهای آرایه های انجمنی می توانند رشته ها عددهایی بدون ترتیب باشند به این معنی که الزاما اندیس عنصر اول 0 و عنصر دوم 1 و الی اخر در آرایه های انجمنی وجود ندارد. همچنین هر عنصر آرایه انجمنی به صورت یک دوتایی (زوج) key => value است.

همچنین دو روش حلقه for و foreach  برای پیمایش آرایه انجمنی توضیح داده شد که شاید بتوانیم بگوییم حلقه foreach کاربرد بیشتر و ساده تری دارد. همچنین دو تابع echo و تابع ()print درون پی اچ پی برای نمایش و چاپ خروجی بر روی صفحه وب استفاده می شوند. در نهایت توسط تابع ()mt_rand نشان دادیم که می توانیم در هر زمان مقدار جدیدی را به یک عنصر از آرایه انتساب دهیم، تنها لازم است شماره اندیس یا نام کلید را مشخص کنید.