بخش چهارم: آرایههای چندبعدی
۴-۱. تعریف آرایه چندبعدی
آرایهای که عناصر آن خودشان آرایه باشند، آرایه چندبعدی نامیده میشود. سادهترین حالت آن، آرایه دوبعدی است؛ یعنی آرایهای که هر عنصر آن یک آرایه است.
مثال:
<?php
$students = [
["علی", 17],
["رضا", 18],
["مریم", 16]
];
?>
در این آرایه، هر عنصر یک آرایه کوچکتر است. بهطور کلی، آرایه چندبعدی برای نگهداری دادههای جدولی مناسب است.
۴-۲. ساختار آرایه دوبعدی
آرایه دوبعدی را میتوان مانند یک جدول تصور کرد. سطرها با کلید اول و ستونها با کلید دوم مشخص میشوند.
<?php
$students = [
["علی", 17, "کامپیوتر"],
["رضا", 18, "حسابداری"],
["مریم", 16, "کامپیوتر"]
];
?>
در این مثال:
| سطر | ستون 0 | ستون 1 | ستون 2 |
|---|---|---|---|
| 0 | علی | 17 | کامپیوتر |
| 1 | رضا | 18 | حسابداری |
| 2 | مریم | 16 | کامپیوتر |
۴-۳. دسترسی به عناصر آرایه دوبعدی
برای دسترسی به یک عنصر، ابتدا کلید سطر و سپس کلید ستون را مینویسیم.
<?php
$students = [
["علی", 17, "کامپیوتر"],
["رضا", 18, "حسابداری"],
["مریم", 16, "کامپیوتر"]
];
echo $students[0][0]; // علی
echo $students[1][1]; // 18
echo $students[2][2]; // کامپیوتر
?>
۴-۴. تغییر مقدار یک عنصر
<?php
$students = [
["علی", 17, "کامپیوتر"],
["رضا", 18, "حسابداری"]
];
$students[1][1] = 19;
print_r($students);
?>
خروجی:
Array
(
[0] => Array
(
[0] => علی
[1] => 17
[2] => کامپیوتر
)
[1] => Array
(
[0] => رضا
[1] => 19
[2] => حسابداری
)
)
۴-۵. افزودن سطر جدید
برای افزودن یک سطر جدید، یک آرایه جدید به انتهای آرایه اصلی اضافه میکنیم.
<?php
$students = [
["علی", 17],
["رضا", 18]
];
$students[] = ["مریم", 16];
print_r($students);
?>
۴-۶. افزودن ستون جدید به یک سطر
برای افزودن مقدار جدید به یک سطر، از کلید بعدی آن سطر استفاده میکنیم.
<?php
$students = [
["علی", 17],
["رضا", 18]
];
$students[0][] = "کامپیوتر";
$students[1][] = "حسابداری";
print_r($students);
?>
۴-۷. حذف یک سطر
<?php
$students = [
["علی", 17],
["رضا", 18],
["مریم", 16]
];
unset($students[1]);
print_r($students);
?>
نکته: پس از حذف، کلیدهای آرایه اصلی بهطور خودکار مرتب نمیشوند.
۴-۸. حذف یک عنصر از یک سطر
<?php
$students = [
["علی", 17, "کامپیوتر"],
["رضا", 18, "حسابداری"]
];
unset($students[0][2]);
print_r($students);
?>
۴-۹. پیمایش آرایه دوبعدی
برای مرور همه عناصر آرایه دوبعدی، معمولاً از دو حلقه تودرتو استفاده میکنیم.
استفاده از foreach تودرتو
<?php
$students = [
["علی", 17, "کامپیوتر"],
["رضا", 18, "حسابداری"],
["مریم", 16, "کامپیوتر"]
];
foreach ($students as $row) {
foreach ($row as $value) {
echo $value . " | ";
}
echo "<br>";
}
?>
خروجی:
علی | 17 | کامپیوتر |
رضا | 18 | حسابداری |
مریم | 16 | کامپیوتر |
استفاده از foreach با کلید سطر
<?php
$students = [
["علی", 17],
["رضا", 18]
];
foreach ($students as $rowIndex => $row) {
echo "سطر " . $rowIndex . ": ";
foreach ($row as $value) {
echo $value . " ";
}
echo "<br>";
}
?>
خروجی:
سطر 0: علی 17
سطر 1: رضا 18
استفاده از حلقه for
<?php
$students = [
["علی", 17],
["رضا", 18]
];
for ($i = 0; $i < count($students); $i++) {
for ($j = 0; $j < count($students[$i]); $j++) {
echo $students[$i][$j] . " ";
}
echo "<br>";
}
?>
۴-۱۰. آرایه دوبعدی با کلید انجمنی
میتوان در آرایه دوبعدی از کلیدهای رشتهای نیز استفاده کرد.
<?php
$students = [
[
"name" => "علی",
"age" => 17,
"field" => "کامپیوتر"
],
[
"name" => "رضا",
"age" => 18,
"field" => "حسابداری"
]
];
echo $students[0]["name"]; // علی
echo $students[1]["field"]; // حسابداری
?>
پیمایش این آرایه:
<?php
foreach ($students as $student) {
foreach ($student as $key => $value) {
echo $key . " : " . $value . " | ";
}
echo "<br>";
}
?>
مطالعه تکمیلی: آرایه دوبعدی با کلید انجمنی برای نگهداری رکوردهای پایگاه داده بسیار رایج است. هر سطر یک رکورد و هر کلید یک نام ستون است. در پروژههای واقعی، نتیجه پرسوجوهای پایگاه داده معمولاً به همین شکل دریافت میشود.
۴-۱۱. آرایه سهبعدی
آرایهای که عناصر آن آرایه دوبعدی باشند، آرایه سهبعدی نامیده میشود.
<?php
$data = [
[
["علی", 17],
["رضا", 18]
],
[
["مریم", 16],
["سارا", 15]
]
];
echo $data[1][0][0]; // مریم
?>
پیمایش آرایه سهبعدی به سه حلقه تودرتو نیاز دارد.
<?php
foreach ($data as $level1) {
foreach ($level1 as $level2) {
foreach ($level2 as $value) {
echo $value . " ";
}
echo "<br>";
}
}
?>
مطالعه تکمیلی: استفاده از آرایههای سهبعدی و بیشتر در برنامههای معمول کمتر رایج است. در بیشتر موارد، استفاده از آرایه دوبعدی با کلیدهای انجمنی خواناتر و قابل نگهداریتر است. اگر ساختار داده پیچیدهتر شود، بهتر است به جای آرایههای چندبعدی عمیق، از ساختارهای شیگرا استفاده شود.
۴-۱۲. شمارش عناصر در آرایه چندبعدی
تابع count بهطور پیشفرض فقط عناصر سطح اول را میشمارد.
<?php
$students = [
["علی", 17],
["رضا", 18],
["مریم", 16]
];
echo count($students); // 3
?>
برای شمارش همه عناصر بهصورت بازگشتی، از حالت COUNT_RECURSIVE استفاده میکنیم.
<?php
echo count($students, COUNT_RECURSIVE); // 9
?>
در مثال بالا، 3 سطر و هر سطر 2 مقدار دارد؛ بنابراین مجموع عناصر 9 است.
مطالعه تکمیلی: شمارش بازگشتی شامل خود آرایههای داخلی نیز میشود. به همین دلیل عدد حاصل ممکن است بیشتر از تعداد مقادیر نهایی باشد. برای درک دقیق، ساختار آرایه را با
print_rبررسی کنید.
۴-۱۳. مثال کامل
<?php
$products = [
[
"name" => "کیبورد",
"price" => 450000,
"count" => 10
],
[
"name" => "ماوس",
"price" => 250000,
"count" => 20
]
];
$products[] = [
"name" => "مانیتور",
"price" => 3500000,
"count" => 5
];
$products[1]["price"] = 270000;
echo "لیست کالاها:<br>";
foreach ($products as $index => $product) {
echo "کالای " . ($index + 1) . ":<br>";
foreach ($product as $key => $value) {
echo $key . " : " . $value . "<br>";
}
echo "<hr>";
}
?>
۴-۱۴. نکات مهم
- آرایه چندبعدی، آرایهای است که عناصر آن آرایه هستند.
- برای دسترسی به عناصر، کلیدها را به ترتیب مینویسیم.
- برای پیمایش آرایه دوبعدی از دو حلقه تودرتو استفاده میکنیم.
- برای پیمایش آرایه سهبعدی به سه حلقه تودرتو نیاز است.
countبهطور پیشفرض فقط سطح اول را میشمارد.- برای شمارش بازگشتی از
COUNT_RECURSIVEاستفاده میکنیم. - آرایه دوبعدی با کلید انجمنی برای نگهداری رکوردها بسیار مناسب است.
- استفاده از آرایههای با ابعاد بیشتر از سه، معمولاً توصیه نمیشود.