بخش ششم: توابع پرکاربرد آرایه‌ها (بخش اول)

۶-۱. مقدمه

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 جابه‌جایی کلید و مقدار

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

  1. توابع آماده، کد را کوتاه‌تر و خواناتر می‌کنند.
  2. count برای شمارش و array_sum برای جمع عناصر عددی استفاده می‌شود.
  3. array_keys و array_values برای جدا کردن کلیدها و مقدارها به کار می‌روند.
  4. array_merge آرایه‌ها را ادغام می‌کند و در کلیدهای تکراری، مقدار آرایه دوم را نگه می‌دارد.
  5. array_push و array_pop برای کار با انتهای آرایه و array_shift و array_unshift برای ابتدای آرایه استفاده می‌شوند.
  6. in_array وجود مقدار و array_key_exists وجود کلید را بررسی می‌کنند.
  7. array_slice آرایه اصلی را تغییر نمی‌دهد، اما array_splice تغییر می‌دهد.
  8. array_unique مقادیر تکراری را حذف می‌کند، اما کلیدها را حفظ می‌کند.
  9. در استفاده از array_search همیشه با !== false بررسی کنید.
  10. برای مقایسه دقیق در in_array، پارامتر سوم را true قرار دهید.