تقریبا تمام فریم ورک ها Helper دارن تا به توسعه دهنده شون کمک کنن کارهای روتین شون رو ساده و سریع تر انجام بدن. Array Helper یه سری توابع اضافی برای کار با آرایه ها در اختیارتون قرار میده.
1) getColumn. متد بسیار پر استفاده ای هست مخصوصا اونجایی که یک مدل رو find میکنید. مقادیر یک ستون مشخص در آرایه رو بهتون میده. پارامتر اول آرایه مورد نظر و پارامتر دوم نام ستون هست.
$array = [
['id' => '123', 'data' => 'abc'],
['id' => '345', 'data' => 'def'],
];
$result = ArrayHelper::getColumn($array, 'id');
// the result is: ['123', '345']
// using anonymous function
$result = ArrayHelper::getColumn($array, function ($element) {
return $element['id'];
});
2) filter. با استفاده از قوانین مشخص میتونید آرایه رو فیلتر کنید. پارامتر اول آرایه مورد نظرمونه و پارامتر بعدی اون قانونی هست که برای فیلتر کردن آرایه تعریف میکنیم. نمونه قوانین رو در مثال زیر میتونید ببینید.
$array = [
'A' => [1, 2],
'B' => [
'C' => 1,
'D' => 2,
],
'E' => 1,
];
$result = \yii\helpers\ArrayHelper::filter($array, ['A']);
// $result will be:
// [
// 'A' => [1, 2],
// ]
$result = \yii\helpers\ArrayHelper::filter($array, ['A', 'B.C']);
// $result will be:
// [
// 'A' => [1, 2],
// 'B' => ['C' => 1],
// ]
$result = \yii\helpers\ArrayHelper::filter($array, ['B', '!B.C']);
// $result will be:
// [
// 'B' => ['D' => 2],
// ]
3) getValue. این هم مثل مورد اول خیلی استفاده میشه. مقدار یک عنصر از آرایه یا یک پراپرتی از شئ رو بهمون میده.
// working with array
$username = \yii\helpers\ArrayHelper::getValue($_POST, 'username');
// working with object
$username = \yii\helpers\ArrayHelper::getValue($user, 'username');
// working with anonymous function
$fullName = \yii\helpers\ArrayHelper::getValue($user, function ($user, $defaultValue) {
return $user->firstName . ' ' . $user->lastName;
});
// using dot format to retrieve the property of embedded object
$street = \yii\helpers\ArrayHelper::getValue($users, 'address.street');
// using an array of keys to retrieve the value
$value = \yii\helpers\ArrayHelper::getValue($versions, ['1.0', 'date']);
4) index. برای گروه بندی آرایه بر اساس یک کلید مشخص استفاده میشه. پارامتر اول آرایه مورد نظرمون و پارامتر دوم key/ کلیدی است که تصمیم داریم گروه بندی بر اساس اون انجام بشه. به بیان ساده تر، ما میدونیم اندیس آرایه چیه. مثلا آرایه عددی به طور پیش فرض از اندیس 0 شروع میشه و الی آخر. اینجا با این متد میتونیم بگیم اندیس آرایه ما یکی از key های موجود در آرایه مون باشه. مثال رو ببینید.
$array = [
['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
['id' => '345', 'data' => 'def', 'device' => 'tablet'],
['id' => '345', 'data' => 'hgi', 'device' => 'smartphone'],
];
$result = ArrayHelper::index($array, 'id');
خروجی یه آرایه دو سطری میشه. ما گفتیم اندیس آرایه id باشه چون id مقدار تکراری داره و آرایه نمیتونه اندیش تکراری داشته باشه یکیش حذف میشه.
[
'123' => ['id' => '123', 'data' => 'abc', 'device' => 'laptop'],
'345' => ['id' => '345', 'data' => 'hgi', 'device' => 'smartphone']
// The second element of an original array is overwritten by the last element because of the same id
]
5) isAssociative. مشخص میکنه آیا آرایه ما از نوع انجمنی هست یا نه.
6) keyExists. بررسی میکنه آیا آرایه شامل کلید مورد نظر ما هست یا نه.
7) map. متد پر استفاده ی دیگه ای هستن ایشون. باهاش میتونید آرایه رو map کنید(به صورت key:value). مثال ها و خروجی هاش رو ببینید.
$array = [
['id' => '123', 'name' => 'aaa', 'class' => 'x'],
['id' => '124', 'name' => 'bbb', 'class' => 'x'],
['id' => '345', 'name' => 'ccc', 'class' => 'y'],
];
$result = ArrayHelper::map($array, 'id', 'name');
// the result is:
// [
// '123' => 'aaa',
// '124' => 'bbb',
// '345' => 'ccc',
// ]
$result = ArrayHelper::map($array, 'id', 'name', 'class');
// the result is:
// [
// 'x' => [
// '123' => 'aaa',
// '124' => 'bbb',
// ],
// 'y' => [
// '345' => 'ccc',
// ],
// ]
8) merge. کاملا مشخصه. باهاش میتونی آرایه a و b رو با هم merge کنید.
9) remove. یک آیتم از آرایه رو حذف میکنه.
// $array = ['type' => 'A', 'options' => [1, 2]];
// working with array
$type = \yii\helpers\ArrayHelper::remove($array, 'type');
// $array content
// $array = ['options' => [1, 2]];
10) toArray. یک شي/object رو تبدیل به آرایه میکنه.
خلاصه گفتم، برای اطلاعات بیشتر اینجا رو مطالعه کنید.
yii2