احسان رضایی

یک توسعه دهنده

درس های yii2 شماره 24: Array Helper

در yii2 , / تاریخ ارسال 16-02-1397 / 1 نظر / آخرین ویرایش 08-09-1403

تقریبا تمام فریم ورک ها 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 رو تبدیل به آرایه میکنه.

خلاصه گفتم، برای اطلاعات بیشتر اینجا رو مطالعه کنید.

پیشنهاد

کتاب‌ها

کتاب الگوهای طراحی به بیان ساده(design patterns / دیزاین پترن)

در مهندسی نرم افزار، design patterns(الگوهای طراحی) راه حل‌های قابل استفاده برای مشکلاتی هستند که معمولاً در طراحی نرم‌افزار اتفاق می افتند.

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

کتاب refactoring / ریفکتورینگ

Refactoring مجموعه‌ای از تکنیک‌هاست که به منظور اصلاح و بهبود کدهای قبلی بدون تغییر در عملکرد و رفتارشان جهت خوانایی، کارامدی و قابلیت نگهداری بیشتر انجام می‌شود.

در کتاب Refactoring اثر Martin Fowler نوشته شده: refactoring تکنیک مرتب/منظم سازی برای تجدید ساختار کد موجود است. تغییر ساختار داخلی کد بدون تغییر رفتار خارجی آن.

refactoring یک سرمایه‌گذاری و راه حلی برای مقابله با کد کثیف و بدهی فنی است که باعث کاهش هزینه‌های توسعه نرم‌افزار در آینده خواهد شد.

ارسال نظر

فرهاد در تاریخ 1400/11/09 - 14:19 نوشته
سلام آقای رضایی ممنون بابت آموزشای خوبتون.