تابع array_values() در PHP
تابع array_values() یکی از توابع ساده اما بسیار کاربردی در PHP است که برای استخراج تمام مقادیر یک آرایه و بازنشانی (reindex) شاخصها به شمارشی ۰، ۱، ۲ و … استفاده میشود. در این مقاله به صورت دقیق رفتار، نمونههای واقعی، موارد کاربرد، نکات بهینهسازی و تفاوت با توابع مرتبط را بررسی میکنیم.
سینتکس و مقدار برگشتی
array array_values ( array $array )این تابع یک آرایه میگیرد و یک آرایه جدید برمیگرداند که تمام مقادیر آرایهٔ ورودی را شامل میشود ولی کلیدها با شاخصهای عددی مرتبشدهی ۰ تا n-1 جایگزین شدهاند.
رفتار پایهای و مثال ساده
<?php
$assoc = ['a' => 10, 'b' => 20, 'c' => 30];
$values = array_values($assoc);
print_r($values);
?>خروجی:
Array
(
[0] => 10
[1] => 20
[2] => 30
)
در این مثال مقادیر آرایهٔ انجمنی (associative) استخراج شده و کلیدهای رشتهای حذف و با شاخصهای عددی جدید جایگزین شدهاند.
چرا و چه زمانی از array_values استفاده میکنیم؟
- بازنشانی شاخصها بعد از حذف عناصر (unset)
- آمادهسازی برای خروجی JSON: تبدیل آرایهٔ PHP به JSON array بهجای JSON object
- استفاده در منطقهایی که نیاز به آرایهٔ با شاخصهای متوالی دارند (مثلاً پیمایش ایندکسی)
مثال: بازنشانی شاخصها بعد از فیلتر کردن
<?php
$numbers = [0 => 1, 1 => 2, 2 => 3, 3 => 4];
$filtered = array_filter($numbers, function($n){ return $n % 2 === 0; }); // نتیجه: [1=>2, 3=>4]
$reindexed = array_values($filtered); // نتیجه: [0=>2, 1=>4]
print_r($reindexed);
?>در این مثال array_filter شاخصها را حفظ میکند و باعث میشود که آرایهٔ بازگشتی کلیدهای غیرپیوسته داشته باشد. با استفاده از array_values شاخصها دوباره از ۰ شروع میشوند که برای پردازشهای بعدی مفید است.
array_values و json_encode
<?php
$assoc = [10 => 'a', 11 => 'b'];
echo json_encode($assoc); // خروجی بهصورت شیء: {"10":"a","11":"b"}
echo json_encode(array_values($assoc)); // خروجی بهصورت آرایه: ["a","b"]
?>PHP هنگام تبدیل آرایهها به JSON، آرایههایی را که کلیدهای آنها پیوسته از ۰ هستند به JSON array تبدیل میکند؛ در غیر این صورت به JSON object تبدیل میشوند. لذا برای گرفتن یک JSON آرایهای از مجموعهای که کلیدهای عددی نامرتب دارد، از array_values استفاده کنید.
تفاوت با توابع مرتبط
| تابع | عملکرد |
|---|---|
| array_values() | مقادیر را استخراج و کلیدها را به شاخصهای عددی ۰..n-1 بازنشانی میکند |
| array_keys() | کلیدهای آرایه را به صورت یک آرایه برمیگرداند |
| array_column() | از آرایههای چندبعدی مقادیر یک ستون را استخراج میکند |
| array_filter() | با فیلتر کردن مقادیر، بعضی عناصر را حذف میکند اما کلیدها را نگه میدارد |
مثال پیشرفته: استفاده با array_column و حذف کلیدها
<?php
$users = [
['id' => 5, 'name' => 'Ali'],
['id' => 9, 'name' => 'Sara'],
];
$ids = array_column($users, 'id'); // [5,9] - این خود توانایی تولید آرایه عددی را دارد
$names_shuffled = [
10 => 'Sara',
2 => 'Ali'
];
$names = array_values($names_shuffled); // [0=>'Sara',1=>'Ali']
?>در اینجا array_column معمولاً خروجیای با ایندکسهای مناسب تولید میکند، اما در مواقعی که ایندکسها ناهمگن باشند میتوان از array_values برای یکسانسازی بهره برد.
نکات و هشدارها (Best Practices)
- با استفاده از array_values کلیدهای اصلی از بین میرود — اگر نیاز به کلیدها دارید، از آن استفاده نکنید.
- برای آرایههای حجیم، array_values یک آرایهٔ جدید ایجاد میکند و حافظه مضاعف مصرف میشود؛ در پردازشهای حساس به حافظه این نکته را در نظر بگیرید.
- پیچیدگی زمانی O(n) است؛ برای آرایههای بسیار بزرگ هزینهٔ خطی دارد.
- برای اصلاح شاخصها بعد از استفاده از unset یا array_splice از array_values استفاده کنید.
نمونهٔ بهینهسازی: کاهش مصرف حافظه
اگر میخواهید فقط در زمان کدنویسی از شاخصهای متوالی استفاده کنید و نخواهید دو آرایهٔ همزمان در حافظه باشد، میتوانید با بازنویسی مقدار آرایه از خود آن استفاده کنید:
<?php
$arr = [2 => 'a', 5 => 'b'];
$arr = array_values($arr); // جایگزین کردن در همان متغیر از ایجاد متغیر جدید جلوگیری نمیکند ولی کد واضحتر است
?>این روش کد را خواناتر میکند اما به لحاظ حافظه همچنان یک آرایهٔ جدید ساخته میشود تا زمانی که جمعآوری زباله آن را آزاد کند؛ در PHP این رفتار طبیعی است.
مواردی که array_values کاربرد ندارد
- آرایههای مرتبط با کارهایی که نیاز به کلیدهای خاص دارند (مثلاً lookup با شناسه)
- زمانی که میخواهید کلیدها را حفظ کنید یا آنها اطلاعات معنایی دارند
خلاصه و جمعبندی
تابع array_values() ابزاری ساده و مؤثر برای استخراج مقادیر و بازنشانی شاخصها در PHP است. برای آمادهسازی دادهها جهت ارسال به کلاینت (مثلاً JSON) یا پس از فیلتر کردن و حذف عناصر بسیار مفید است. با این حال باید مراقب از بین رفتن کلیدها و مصرف حافظهٔ اضافه باشید. در طراحی نرمافزار، ابتدا بررسی کنید که آیا کلیدها حائز اهمیت هستند یا خیر، و سپس تصمیم به استفاده از array_values بگیرید.
آیا این مطلب برای شما مفید بود ؟




