انواع آرایه ها در زبان PHP

درسنامه درس 11 از سری آموزش PHP 7
انواع آرایه ها در زبان PHP

همانطور که میدانید متغیرها یک مقدار خاص را برای ما ذخیره می کنند تا بعدا بتوانیم از آن استفاده کنیم. آرایه ها در php نیز نوع خاصی از متغیرها هستند که به جای یک مقدار چندین مقدار را در خود ذخیره می کنند. به مثال زیر توجه کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array("Volvo", "BMW", "Toyota"); 
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

</body>
</html>

مشاهده ی خروجی

خروجی این کد عبارت I like Volvo, BMW and Toyota خواهد بود. در واقع اگر بخواهیم لیست ماشین ها در کد بالا را به صورت عادی در متغیرها قرار دهیم باید بگوییم:

$cars1 = "Volvo";
$cars2 = "BMW";
$cars3 = "Toyota";

شاید بگویید نوشتن این کد آنقدرها هم سخت نیست اما فرض کنید به جای 3 ماشین 300 ماشین داشته باشید! آن وقت چطور؟ اگر بخواهیم بین این ماشین ها بگردیم و ماشین خاصی را پیدا کنیم چطور؟ احتمالا متوجه شده اید که چرا به آرایه ها نیاز داریم.

برای ایجاد آرایه ها در زبان PHP راه های مختلفی وجود دارد. یکی از آن ها استفاده از تابع ()array است. در زبان PHP سه نوع آرایه ی متفاوت داریم:

  • indexed array یا آرایه های ایندکس شده
  • associative array یا آرایه های متناظر
  • Multidimensional array یا آرایه های چند بُعدی

نوع اول: indexed array

index یا اندیس یک آرایه یک عدد مخصوص است. ایندکس آرایه ها را اعدادی پنهان تصور کنید که از صفر شروع شده و تا آخرین عضو آرایه ادامه دارند. برای واضح شدن مطلب یک کتاب را تصور کنید؛ هر کتابی قسمتی به نام فهرست دارد و این فهرست برای هر مبحثی، عددی ارائه می کند که همان شماره ی صفحه است. حالا ایندکس ها در واقع همین شماره ی صفحه برای آرایه ها هستند (یعنی از طریق آن ها به اعضای آرایه دسترسی خواهیم داشت).

برای ساختن آرایه های ایندکس شده دو راه وجود دارد. می توانیم ایندکس (اندیس آرایه) را دست نزنیم تا به صورت خودکار و از صفر تنظیم شود:

$cars = array("Volvo", "BMW", "Toyota");

و یا اینکه ایندکس ها را به صورت دستی تعیین کنیم:

$cars[0] = "Volvo";
$cars[1] = "BMW";
$cars[2] = "Toyota";

در مثال زیر یک آرایه ی ایندکس شده از ماشین ها را داریم که متنی حاوی این ماشین ها را در خروجی به ما نشان می دهد:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array("Volvo", "BMW", "Toyota"); 
echo "I like " . $cars[0] . ", " . $cars[1] . " and " . $cars[2] . ".";
?>

</body>
</html>

مشاهده ی خروجی

اگر بخواهید تعداد اعضای یک آرایه ی ایندکس شده را بدانید باید از تابع ()count استفاده کنید. به این مثال دقت کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array("Volvo", "BMW", "Toyota");
echo count($cars);
?>

</body>
</html>

مشاهده ی خروجی

برای گردش در یک آرایه ی ایندکس شده نیز می توانید از یک حلقه ی for استفاده کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array("Volvo", "BMW", "Toyota");
$arrlength = count($cars);

for($x = 0; $x < $arrlength; $x++) {
    echo $cars[$x];
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

نوع دوم: Associative Array

آرایه های متناظر آرایه هایی هستند که index آنها (یا کلید (key) آنها) به جای عدد نامی است که ما انتخاب کرده باشیم. دو راه برای ساخت این نوع از آرایه ها وجود دارد؛ راه اول به شکل زیر است:

$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

و راه دوم به این شکل:

$age['Peter'] = "35";
$age['Ben'] = "37";
$age['Joe'] = "43";

تفاوتی بین این روش ها وجود ندارد و شما می توانید از هر کدام که خواستید استفاده کنید.

حالا می توانید از این کلیدهای اسمی برای دسترسی به اعضای آرایه استفاده کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");
echo "Peter is " . $age['Peter'] . " years old.";
?>

</body>
</html>

مشاهده ی خروجی

برای گردش در یک آرایه ی متناظر و مثلا نمایش تمام اعضای آن می توان از یک حلقه ی foreach استفاده کرد:

<!DOCTYPE html>
<html>
<body>

<?php
$age = array("Peter"=>"35", "Ben"=>"37", "Joe"=>"43");

foreach($age as $x => $x_value) {
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

</body>
</html>

مشاهده ی خروجی

نکته: حالا که با آرایه ها آشنا شدید ممکن است به اعضا value (مقدار) و به ایندکس ها key (کلید) بگوییم بنابراین اگر عبارت «جفت های key/value» را شنیدید تعجب نکنید.

نوع سوم: Multidimensional Array

آرایه های چند بُعدی، آرایه هایی هستند که یک یا چند آرایه را در خود داشته باشند. زبان PHP می تواند آرایه های دو بعدی، سه بعدی، چهار بعدی، پنج بعدی و ... را بدون هیچ مشکلی ایجاد کند اما کار و مدیریت چنین آرایه هایی (آرایه های بیشتر از 3 بعد) برای اکثر افراد کار سختی به حساب می آید بنابراین بهتر است از 4 بعد و بالاتر دوری کنید.

به طور مثال به آرایه ی دو بعدی زیر توجه کنید:

$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );

آرایه ی دو بُعدی یعنی آرایه ای از یک آرایه ی دیگر و آرایه ی سه بُعدی یعنی آرایه ای از آرایه ای از آرایه ای دیگر و الی آخر.

برای دسترسی به اعضای این آرایه به دو عدد ایندکس نیاز داریم! به این مثال توجه کنید:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );
  
echo $cars[0][0].": In stock: ".$cars[0][1].", sold: ".$cars[0][2].".<br>";
echo $cars[1][0].": In stock: ".$cars[1][1].", sold: ".$cars[1][2].".<br>";
echo $cars[2][0].": In stock: ".$cars[2][1].", sold: ".$cars[2][2].".<br>";
echo $cars[3][0].": In stock: ".$cars[3][1].", sold: ".$cars[3][2].".<br>";
?>

</body>
</html>

مشاهده ی خروجی

همچنین برای گردش در این آرایه ها می توان یک حقله ی for را درون یک حلقه ی for دیگر قرار داد:

<!DOCTYPE html>
<html>
<body>

<?php
$cars = array
  (
  array("Volvo",22,18),
  array("BMW",15,13),
  array("Saab",5,2),
  array("Land Rover",17,15)
  );
    
for ($row = 0; $row < 4; $row++) {
  echo "<p><b>Row number $row</b></p>";
  echo "<ul>";
  for ($col = 0; $col < 3; $col++) {
    echo "<li>".$cars[$row][$col]."</li>";
  }
  echo "</ul>";
}
?>

</body>
</html>

مشاهده ی خروجی

نکته: پردازش آرایه های چند بعدی برای سرور شما هزینه بر تر بوده و مدیریت آن ها نیز سخت تر است بنابراین فقط و فقط هنگام نیاز از آن ها استفاده کنید.

کار با آرایه ها اصلا مبحث دشواری نیست و مطمئن هستم که همه ی شما مطلب را به خوبی درک کرده اید. امیدوارم از این قسمت لذت برده باشید.

تمام فصل‌های سری ترتیبی که روکسو برای مطالعه‌ی دروس سری آموزش PHP 7 توصیه می‌کند:
نویسنده شوید
دیدگاه‌های شما

در این قسمت، به پرسش‌های تخصصی شما درباره‌ی محتوای مقاله پاسخ داده نمی‌شود. سوالات خود را اینجا بپرسید.