بخش ششم: توابع پرکاربرد آرایهها (بخش اول)
۶-۱. مقدمه
PHP مجموعهای گسترده از توابع آماده برای کار با آرایهها دارد. استفاده از این توابع، کد را کوتاهتر، خواناتر و کمخطاتر میکند. در این بخش و بخش بعدی، پرکاربردترین این توابع معرفی میشوند.
۶-۲. تابع count
تعداد عناصر آرایه را برمیگرداند.
<?php
$colors = ["قرمز", "سبز", "آبی"];
echo count($colors); // 3
?>
برای آرایه چندبعدی، با COUNT_RECURSIVE همه عناصر بهصورت بازگشتی شمرده میشوند.
<?php
$students = [
["علی", 17],
["رضا", 18]
];
echo count($students); // 2
echo count($students, COUNT_RECURSIVE); // 6
?>
مطالعه تکمیلی: تابع
sizeofنام دیگرcountاست و عملکرد یکسانی دارد. استفاده ازcountرایجتر و توصیهشدهتر است.
۶-۳. تابع array_sum
مجموع عناصر عددی آرایه را برمیگرداند.
<?php
$numbers = [10, 20, 30, 40];
echo array_sum($numbers); // 100
?>
اگر آرایه شامل مقدار غیرعددی باشد، آن مقدار نادیده گرفته میشود.
<?php
$data = [10, "abc", 20];
echo array_sum($data); // 30
?>
۶-۴. تابع array_product
حاصلضرب عناصر عددی آرایه را برمیگرداند.
<?php
$numbers = [2, 3, 4];
echo array_product($numbers); // 24
?>
۶-۵. تابع array_keys
همه کلیدهای آرایه را بهصورت یک آرایه جدید برمیگرداند.
<?php
$student = [
"name" => "علی",
"age" => 17,
"field" => "کامپیوتر"
];
print_r(array_keys($student));
?>
خروجی:
Array
(
[0] => name
[1] => age
[2] => field
)
حالت پیشرفتهتر
با دادن مقدار جستجو، کلیدهای مربوط به آن مقدار برگردانده میشوند.
<?php
$data = ["a" => 1, "b" => 2, "c" => 1];
print_r(array_keys($data, 1));
?>
خروجی:
Array
(
[0] => a
[1] => c
)
مطالعه تکمیلی: پارامتر سوم
array_keysتعیین میکند که مقایسه بهصورت دقیق (strict) انجام شود یا نه. مقدار پیشفرضfalseاست. اگرtrueباشد، نوع داده نیز باید یکسان باشد.
۶-۶. تابع array_values
همه مقدارهای آرایه را بهصورت یک آرایه جدید با کلیدهای عددی پیوسته برمیگرداند.
<?php
$student = [
"name" => "علی",
"age" => 17,
"field" => "کامپیوتر"
];
print_r(array_values($student));
?>
خروجی:
Array
(
[0] => علی
[1] => 17
[2] => کامپیوتر
)
این تابع برای مرتب کردن مجدد کلیدها پس از حذف عنصر نیز کاربرد دارد.
<?php
$colors = ["قرمز", "سبز", "آبی"];
unset($colors[1]);
$colors = array_values($colors);
print_r($colors);
?>
خروجی:
Array
(
[0] => قرمز
[1] => آبی
)
۶-۷. تابع array_combine
دو آرایه هماندازه را ترکیب میکند؛ عناصر آرایه اول کلید و عناصر آرایه دوم مقدار میشوند.
<?php
$keys = ["name", "age", "field"];
$values = ["علی", 17, "کامپیوتر"];
$student = array_combine($keys, $values);
print_r($student);
?>
خروجی:
Array
(
[name] => علی
[age] => 17
[field] => کامپیوتر
)
نکته: اگر تعداد عناصر دو آرایه برابر نباشد، PHP خطا میدهد.
۶-۸. تابع array_merge
دو یا چند آرایه را با هم ادغام میکند و یک آرایه جدید برمیگرداند.
<?php
$array1 = ["قرمز", "سبز"];
$array2 = ["آبی", "زرد"];
$result = array_merge($array1, $array2);
print_r($result);
?>
خروجی:
Array
(
[0] => قرمز
[1] => سبز
[2] => آبی
[3] => زرد
)
ادغام آرایههای انجمنی
در آرایههای انجمنی، اگر کلید تکراری باشد، مقدار آرایه دوم جایگزین مقدار آرایه اول میشود.
<?php
$array1 = ["name" => "علی", "age" => 17];
$array2 = ["age" => 18, "field" => "کامپیوتر"];
$result = array_merge($array1, $array2);
print_r($result);
?>
خروجی:
Array
(
[name] => علی
[age] => 18
[field] => کامپیوتر
)
مطالعه تکمیلی: در آرایههای اندیسدار،
array_mergeکلیدها را دوباره از صفر شمارهگذاری میکند. اگر بخواهیم کلیدها حفظ شوند، از عملگر+استفاده میکنیم. تفاوت این دو در بخش بعدی توضیح داده میشود.
۶-۹. تابع array_merge_recursive
مانند array_merge است، اما اگر کلید تکراری باشد، مقدارها را در یک آرایه جدید قرار میدهد و جایگزین نمیکند.
<?php
$array1 = ["name" => "علی", "colors" => ["قرمز"]];
$array2 = ["name" => "رضا", "colors" => ["سبز"]];
$result = array_merge_recursive($array1, $array2);
print_r($result);
?>
خروجی:
Array
(
[name] => Array
(
[0] => علی
[1] => رضا
)
[colors] => Array
(
[0] => قرمز
[1] => سبز
)
)
مطالعه تکمیلی: این تابع در پروژههای معمولی کمتر استفاده میشود. کاربرد اصلی آن ادغام تنظیمات پیکربندی است که ممکن است کلیدهای مشترک داشته باشند.
۶-۱۰. تابع array_push
یک یا چند عنصر را به انتهای آرایه اضافه میکند.
<?php
$colors = ["قرمز", "سبز"];
array_push($colors, "آبی", "زرد");
print_r($colors);
?>
خروجی:
Array
(
[0] => قرمز
[1] => سبز
[2] => آبی
[3] => زرد
)
نکته: استفاده از $array[] = value سریعتر و سادهتر از array_push است. array_push زمانی مناسب است که بخواهیم چند عنصر را همزمان اضافه کنیم.
۶-۱۱. تابع array_pop
آخرین عنصر آرایه را حذف میکند و مقدار آن را برمیگرداند.
<?php
$colors = ["قرمز", "سبز", "آبی"];
$last = array_pop($colors);
echo $last; // آبی
print_r($colors);
?>
خروجی:
آبی
Array
(
[0] => قرمز
[1] => سبز
)
۶-۱۲. تابع array_shift
اولین عنصر آرایه را حذف میکند و مقدار آن را برمیگرداند. کلیدهای باقیمانده دوباره از صفر شمارهگذاری میشوند.
<?php
$colors = ["قرمز", "سبز", "آبی"];
$first = array_shift($colors);
echo $first; // قرمز
print_r($colors);
?>
خروجی:
قرمز
Array
(
[0] => سبز
[1] => آبی
)
۶-۱۳. تابع array_unshift
یک یا چند عنصر را به ابتدای آرایه اضافه میکند. کلیدها دوباره شمارهگذاری میشوند.
<?php
$colors = ["سبز", "آبی"];
array_unshift($colors, "قرمز", "زرد");
print_r($colors);
?>
خروجی:
Array
(
[0] => قرمز
[1] => زرد
[2] => سبز
[3] => آبی
)
۶-۱۴. تابع in_array
بررسی میکند که یک مقدار در آرایه وجود دارد یا نه.
<?php
$colors = ["قرمز", "سبز", "آبی"];
if (in_array("سبز", $colors)) {
echo "مقدار سبز در آرایه وجود دارد.";
} else {
echo "مقدار سبز در آرایه وجود ندارد.";
}
?>
حالت دقیق (strict)
بهطور پیشفرض، in_array نوع داده را در نظر نمیگیرد. برای مقایسه دقیق، پارامتر سوم را true قرار میدهیم.
<?php
$data = [1, 2, 3];
var_dump(in_array("1", $data)); // true
var_dump(in_array("1", $data, true)); // false
?>
مطالعه تکمیلی: مقایسه غیردقیق در
in_arrayممکن است باعث خطاهای منطقی شود. برای مثال، مقدار رشتهای"1"با عدد1برابر در نظر گرفته میشود. در برنامههای حساس، استفاده از حالت strict توصیه میشود.
۶-۱۵. تابع array_search
کلید اولین عنصری را که مقدار موردنظر را دارد، برمیگرداند. اگر مقدار پیدا نشود، مقدار false برمیگرداند.
<?php
$colors = ["قرمز", "سبز", "آبی"];
$key = array_search("سبز", $colors);
echo $key; // 1
?>
نکته مهم: اگر کلید پیدا شده 0 باشد، شرط if ($key) نادرست عمل میکند. باید از !== false استفاده کنیم.
<?php
$colors = ["قرمز", "سبز", "آبی"];
$key = array_search("قرمز", $colors);
if ($key !== false) {
echo "کلید پیدا شد: " . $key;
} else {
echo "مقدار پیدا نشد.";
}
?>
۶-۱۶. تابع array_key_exists
بررسی میکند که یک کلید در آرایه وجود دارد یا نه.
<?php
$student = ["name" => "علی", "age" => 17];
if (array_key_exists("name", $student)) {
echo "کلید name وجود دارد.";
}
?>
مطالعه تکمیلی: تفاوت
array_key_existsباissetدر این است کهarray_key_existsحتی وقتی مقدار عنصرnullباشد نیزtrueبرمیگرداند، اماissetدر این حالتfalseبرمیگرداند.
۶-۱۷. تابع array_slice
بخشی از آرایه را برمیگرداند.
<?php
$colors = ["قرمز", "سبز", "آبی", "زرد", "مشکی"];
$part = array_slice($colors, 1, 3);
print_r($part);
?>
خروجی:
Array
(
[0] => سبز
[1] => آبی
[2] => زرد
)
پارامترها:
| پارامتر | توضیح |
|---|---|
| آرایه | آرایه اصلی |
| شروع | اندیس شروع (از صفر) |
| طول | تعداد عناصر (اختیاری) |
| حفظ کلید | اگر true باشد، کلیدها حفظ میشوند (اختیاری) |
<?php
$colors = ["قرمز", "سبز", "آبی", "زرد"];
print_r(array_slice($colors, 1, 2, true));
?>
خروجی:
Array
(
[1] => سبز
[2] => آبی
)
۶-۱۸. تابع array_splice
بخشی از آرایه را حذف میکند و در صورت نیاز، عناصر جدیدی جایگزین میکند. این تابع آرایه اصلی را تغییر میدهد.
<?php
$colors = ["قرمز", "سبز", "آبی", "زرد"];
$removed = array_splice($colors, 1, 2, ["مشکی", "سفید"]);
print_r($colors);
echo "<br>";
print_r($removed);
?>
خروجی:
Array
(
[0] => قرمز
[1] => مشکی
[2] => سفید
[3] => زرد
)
Array
(
[0] => سبز
[1] => آبی
)
مطالعه تکمیلی: تفاوت
array_sliceوarray_spliceدر این است کهarray_sliceآرایه اصلی را تغییر نمیدهد و فقط بخشی را برمیگرداند، اماarray_spliceآرایه اصلی را تغییر میدهد و عناصر حذفشده را برمیگرداند.
۶-۱۹. تابع array_unique
عناصر تکراری آرایه را حذف میکند و اولین مقدار را نگه میدارد.
<?php
$numbers = [1, 2, 2, 3, 3, 3, 4];
$unique = array_unique($numbers);
print_r($unique);
?>
خروجی:
Array
(
[0] => 1
[1] => 2
[3] => 3
[6] => 4
)
نکته: کلیدها حفظ میشوند. برای مرتب کردن مجدد کلیدها از array_values استفاده کنید.
<?php
$unique = array_values(array_unique($numbers));
print_r($unique);
?>
۶-۲۰. تابع array_reverse
ترتیب عناصر آرایه را برعکس میکند.
<?php
$colors = ["قرمز", "سبز", "آبی"];
print_r(array_reverse($colors));
?>
خروجی:
Array
(
[0] => آبی
[1] => سبز
[2] => قرمز
)
اگر پارامتر دوم true باشد، کلیدها حفظ میشوند.
<?php
$student = ["name" => "علی", "age" => 17];
print_r(array_reverse($student, true));
?>
۶-۲۱. تابع array_flip
کلیدها و مقدارها را جابهجا میکند.
<?php
$student = ["name" => "علی", "age" => 17];
print_r(array_flip($student));
?>
خروجی:
Array
(
[علی] => name
[17] => age
)
نکته: اگر مقداری تکراری باشد، آخرین کلید نگه داشته میشود.
مطالعه تکمیلی:
array_flipفقط روی مقادیری کار میکند که بتوانند بهعنوان کلید استفاده شوند؛ یعنی عدد صحیح یا رشته. اگر مقدار آرایه یا شیء باشد، PHP هشدار میدهد.
۶-۲۲. جدول خلاصه توابع این بخش
| تابع | کار |
|---|---|
count |
شمارش عناصر |
array_sum |
مجموع عناصر عددی |
array_product |
حاصلضرب عناصر عددی |
array_keys |
گرفتن کلیدها |
array_values |
گرفتن مقدارها |
array_combine |
ترکیب دو آرایه بهصورت کلید و مقدار |
array_merge |
ادغام آرایهها |
array_merge_recursive |
ادغام بازگشتی آرایهها |
array_push |
افزودن به انتها |
array_pop |
حذف از انتها |
array_shift |
حذف از ابتدا |
array_unshift |
افزودن به ابتدا |
in_array |
بررسی وجود مقدار |
array_search |
یافتن کلید یک مقدار |
array_key_exists |
بررسی وجود کلید |
array_slice |
برش آرایه بدون تغییر اصلی |
array_splice |
برش و تغییر آرایه اصلی |
array_unique |
حذف مقادیر تکراری |
array_reverse |
برعکس کردن ترتیب |
array_flip |
جابهجایی کلید و مقدار |
۶-۲۳. نکات مهم
- توابع آماده، کد را کوتاهتر و خواناتر میکنند.
countبرای شمارش وarray_sumبرای جمع عناصر عددی استفاده میشود.array_keysوarray_valuesبرای جدا کردن کلیدها و مقدارها به کار میروند.array_mergeآرایهها را ادغام میکند و در کلیدهای تکراری، مقدار آرایه دوم را نگه میدارد.array_pushوarray_popبرای کار با انتهای آرایه وarray_shiftوarray_unshiftبرای ابتدای آرایه استفاده میشوند.in_arrayوجود مقدار وarray_key_existsوجود کلید را بررسی میکنند.array_sliceآرایه اصلی را تغییر نمیدهد، اماarray_spliceتغییر میدهد.array_uniqueمقادیر تکراری را حذف میکند، اما کلیدها را حفظ میکند.- در استفاده از
array_searchهمیشه با!== falseبررسی کنید. - برای مقایسه دقیق در
in_array، پارامتر سوم راtrueقرار دهید.