بخش سوم: آرایه‌های انجمنی (کلید رشته‌ای)

۳-۱. تعریف آرایه انجمنی

در آرایه انجمنی، کلید هر عنصر یک نام یا رشته است، نه یک عدد ترتیبی. به همین دلیل به آن آرایه با کلید رشته‌ای یا آرایه انجمنی می‌گویند.

مثال:

<?php
$student = [
    "name"  => "علی",
    "age"   => 17,
    "field" => "کامپیوتر"
];
?>

در این آرایه:

کلید مقدار
name علی
age 17
field کامپیوتر

۳-۲. کاربرد آرایه انجمنی

آرایه انجمنی وقتی مناسب است که بخواهیم برای هر مقدار، یک نام معنادار داشته باشیم. برای مثال، اطلاعات یک دانش‌آموز شامل نام، سن و رشته است. استفاده از کلیدهای name، age و field خوانایی کد را بسیار بیشتر می‌کند.

۳-۳. ساخت آرایه انجمنی

روش اول: استفاده از کروشه

<?php
$book = [
    "title"  => "برنامه‌نویسی PHP",
    "author" => "احمدی",
    "price"  => 250000
];
?>

روش دوم: استفاده از array

<?php
$book = array(
    "title"  => "برنامه‌نویسی PHP",
    "author" => "احمدی",
    "price"  => 250000
);
?>

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

ساخت آرایه انجمنی خالی

<?php
$book = [];
?>

یا:

<?php
$book = array();
?>

۳-۴. خواندن مقدار یک عنصر

برای خواندن مقدار، کلید رشته‌ای را داخل کروشه می‌نویسیم.

<?php
$student = [
    "name" => "علی",
    "age"  => 17
];

echo $student["name"]; // علی
echo $student["age"];  // 17
?>

نکته: کلید رشته‌ای باید داخل علامت نقل قول نوشته شود. نوشتن کلید بدون نقل قول ممکن است در برخی نسخه‌های PHP هشدار ایجاد کند.

<?php
echo $student["name"]; // درست
// echo $student[name]; // نادرست یا همراه با هشدار
?>

۳-۵. تغییر مقدار یک عنصر

با مشخص کردن کلید، مقدار آن تغییر می‌کند.

<?php
$student = [
    "name" => "علی",
    "age"  => 17
];

$student["age"] = 18;

print_r($student);
?>

خروجی:

Array
(
    [name] => علی
    [age] => 18
)

۳-۶. افزودن عنصر جدید

برای افزودن عنصر جدید، یک کلید جدید انتخاب می‌کنیم و مقدار را به آن نسبت می‌دهیم.

<?php
$student = [
    "name" => "علی",
    "age"  => 17
];

$student["field"] = "کامپیوتر";
$student["grade"] = 19;

print_r($student);
?>

خروجی:

Array
(
    [name] => علی
    [age] => 17
    [field] => کامپیوتر
    [grade] => 19
)

۳-۷. حذف عنصر

برای حذف یک عنصر از آرایه انجمنی، از unset استفاده می‌کنیم.

<?php
$student = [
    "name"  => "علی",
    "age"   => 17,
    "field" => "کامپیوتر"
];

unset($student["age"]);

print_r($student);
?>

خروجی:

Array
(
    [name] => علی
    [field] => کامپیوتر
)

۳-۸. تعداد عناصر آرایه

برای شمارش تعداد عناصر آرایه انجمنی نیز از count استفاده می‌کنیم.

<?php
$student = [
    "name" => "علی",
    "age"  => 17
];

echo count($student); // 2
?>

۳-۹. بررسی وجود یک کلید

استفاده از isset

<?php
$student = [
    "name" => "علی",
    "age"  => 17
];

if (isset($student["name"])) {
    echo "کلید name وجود دارد.";
} else {
    echo "کلید name وجود ندارد.";
}
?>

استفاده از array_key_exists

<?php
$student = [
    "name" => "علی",
    "age"  => 17
];

if (array_key_exists("name", $student)) {
    echo "کلید name وجود دارد.";
}
?>

مطالعه تکمیلی: اگر مقدار یک عنصر null باشد، isset مقدار false برمی‌گرداند، اما array_key_exists مقدار true برمی‌گرداند؛ زیرا فقط وجود کلید را بررسی می‌کند.

۳-۱۰. پیمایش آرایه انجمنی

برای مرور همه عناصر آرایه انجمنی، از foreach استفاده می‌کنیم. در این حالت به کلید و مقدار هر دو دسترسی داریم.

<?php
$student = [
    "name"  => "علی",
    "age"   => 17,
    "field" => "کامپیوتر"
];

foreach ($student as $key => $value) {
    echo $key . " : " . $value . "<br>";
}
?>

خروجی:

name : علی
age : 17
field : کامپیوتر

اگر فقط مقدارها مورد نیاز باشند، می‌توان از حالت ساده‌تر استفاده کرد.

<?php
foreach ($student as $value) {
    echo $value . "<br>";
}
?>

۳-۱۱. مثال کامل

<?php
$product = [
    "name"  => "کیبورد",
    "model" => "K-200",
    "price" => 450000
];

echo "نام کالا: " . $product["name"] . "<br>";
echo "قیمت کالا: " . $product["price"] . "<br>";

$product["price"] = 500000;
$product["count"] = 10;

unset($product["model"]);

echo "اطلاعات نهایی کالا:<br>";

foreach ($product as $key => $value) {
    echo $key . " : " . $value . "<br>";
}
?>

خروجی:

نام کالا: کیبورد
قیمت کالا: 450000
اطلاعات نهایی کالا:
name : کیبورد
price : 500000
count : 10

۳-۱۲. نکات مهم

  1. در آرایه انجمنی، کلیدها معمولاً رشته هستند.
  2. کلیدها باید داخل علامت نقل قول نوشته شوند.
  3. برای افزودن عنصر جدید، یک کلید جدید تعریف می‌کنیم.
  4. برای حذف عنصر از unset استفاده می‌کنیم.
  5. برای بررسی وجود کلید از isset یا array_key_exists استفاده می‌کنیم.
  6. برای پیمایش آرایه انجمنی، foreach با ساختار $key => $value مناسب‌ترین روش است.
  7. اگر کلیدی تکراری تعریف شود، مقدار قبلی آن بازنویسی می‌شود.

مطالعه تکمیلی: در PHP همه آرایه‌ها در واقع مجموعه‌ای از جفت‌های کلید و مقدار هستند. بنابراین مرز دقیقی بین آرایه اندیس‌دار و انجمنی وجود ندارد. آرایه‌ای که کلیدهای آن رشته باشند، انجمنی نامیده می‌شود. همچنین می‌توان از توابع array_keys برای گرفتن همه کلیدها و array_values برای گرفتن همه مقدارها استفاده کرد.

<?php
$student = ["name" => "علی", "age" => 17];

print_r(array_keys($student));
print_r(array_values($student));
?>

۳-۱۳. جمع‌بندی بخش سوم

  • در آرایه انجمنی، کلیدها رشته هستند و معنای مشخصی دارند.
  • آرایه انجمنی برای نگهداری اطلاعات وابسته مانند اطلاعات یک دانش‌آموز یا یک کالا مناسب است.
  • برای خواندن، تغییر و افزودن عنصر از کلید رشته‌ای استفاده می‌کنیم.
  • برای حذف عنصر از unset استفاده می‌کنیم.
  • برای پیمایش کامل آرایه انجمنی، foreach با کلید و مقدار بهترین گزینه است.
  • استفاده از کلیدهای معنادار، خوانایی و نگهداری کد را افزایش می‌دهد.