07/09/2018, 17:52

Laravel Helper Với Đối Tượng Là Mảng

Giới thiệu Việc sử dụng hết sức mạnh của một ngôn ngữ lập trình, là một điều không đơn giản. Một trong nhưng lỗi của những newbie là việc không tận dụng được sức mạnh của ngôn ngữ lập trình mình đang sử dụng. Điều này xảy ra, khi chưa có một cái nhìn tổng quan, và chưa có hiểu biết một cách ...

Giới thiệu

  • Việc sử dụng hết sức mạnh của một ngôn ngữ lập trình, là một điều không đơn giản. Một trong nhưng lỗi của những newbie là việc không tận dụng được sức mạnh của ngôn ngữ lập trình mình đang sử dụng. Điều này xảy ra, khi chưa có một cái nhìn tổng quan, và chưa có hiểu biết một cách sâu sắc về ngôn ngữ lập trình mình đang dùng. Ngay cả những người lập trình có kinh nghiệm, khi chuyển đổi sang một ngôn ngữ mới, họ cũng luôn mắc phải một quá trình tìm hiểu ngôn ngữ mới, và tất nhiên, những hiểu biết sâu sắc về một ngôn ngữ, không thể hình thành trong một thời gian ngắn.

  • Để khắc phục điều này, khắc phục ở đây không phải là việc sử dụng ngôn ngữ lập trình với toàn bộ sức mạnh của chúng , mà là hạn chế thời gian sử dụng cho việc tìm hiểu sử dụng ngôn ngữ mới. Còn việc sử dụng một ngôn ngữ lập trình với chưa đủ 50% sức mạnh của ngôn ngữ đó là điều thường gặp khi chúng ta bắt đầu một ngôn ngữ mới.

  • Vậy vì sao việc không sử dụng hết sức mạnh của ngôn ngữ, lại được coi là một lỗi của người lập trình viên? :D , thật ra không phải lỗi, mình không nghĩ đó là lỗi, nhưng đó là điều mà lập trình viên kinh nghiệm sẽ ít gặp hơn so với những lập trình viên mới. Vì khi gặp vấn đề, họ sẽ tìm các giải pháp có sẵn trong ngôn ngữ và các công cụ hỗ trợ, như các package mà nguồn mở, hay các thư viện, hoặc bản thân ngôn ngữ đã hỗ trợ. Họ sẽ không có thời gian mà làm một cái gì đó từ đầu đến cuối một cách hoàn chỉnh để giải quyết một bài toán có sẵn và đã được giải quyết rồi. Điều này được hiểu đơn giản như việc, bạn cố gắng cài đặt bộ sinh theo thuật toán fibo trong khi ngôn ngữ bạn đang dùng đã hỗ trợ làm việc đó, và thậm chí, nó còn hỗ trợ bắt các trường hợp lỗi trong nhiều trường hợp mà có khi bạn còn chưa nghĩ đến. Do đó, việc bỏ công, bỏ sức, bỏ thời gian của bạn đi thực hiện một việc không mang lại hiệu quả, gây ra mất thời gian của chính bản thân bạn, và có thể, gây ảnh hưởng đến tiến độ dự án mà bạn đang tham gia. Điều đơn giản hơn, là người khác sẽ đánh giá năng lực và năng xuất lao động của bạn kém. Mà sự thật không phải thế.

  • Việc bạn đi xây dựng một chức năng đã được hỗ trợ bởi ngôn ngữ (hoặc framework) có mang lại điều gì không? Hoặc hiểu đơn giản là bạn có được gì khi làm vậy không? Theo quan điểm cá nhân của mình là có, khi xây dựng từ đầu một chức năng gì đó, bạn sẽ hiểu rõ đến từng dòng code mà mình viết ra, rồi hiểu dần các trường hợp có thể gặp phải, hoàn thiện dần code của mình, và khi gặp bất kỳ một lỗi nhỏ, hay bug nào, bạn có thể biết là code của mình đang sai ở đâu trong vòng một nốt nhạc. Trong khi đó, việc sử dụng các gói bổ trợ, các công cụ hỗ trợ, bạn sẽ chỉ quan tâm đầu ra, đầu vào của chức năng, không hiểu rõ cơ chế hoạt động, không có cái nhìn và hiểu biết sâu sắc nhất về dự án của mình. Đôi khi nó còn gây dư thừa code, rồi thì dữ liệu lớn, linh tinh. Nhưng việc đánh đổi những điều đó với thời gian hoàn thành công việc, thì thường, những người lập trình sẽ chọn gói hỗ trợ. Việc customize một package hay một phần bổ trợ luôn luôn là việc không đơn giản.

  • Nói như vậy, để các bạn hiểu, việc sử dụng lại các hàm/chức năng được hỗ trợ bởi ngôn ngữ và framework nó được gì và mất gì.

Tổng quát

  • Một trong những framework được đề cập trong thời gian gần đây của ngôn ngữ PHP, được kỳ vọng là sẽ phát triển và giúp việc phát triển web một cách dễ dàng hơn , đó chính là Laravel.
  • Về tìm hiểu laravel , các bạn có thể tìm hiểu thêm bởi các bài viết khác. Bài viết này mình sẽ chỉ đề cập đến Helper của Laravel, và thậm chí là chỉ một phần của Helper trong Laravel . Đó là những hàm Helper với đối tượng là Array
  • Ngoài Array, thì Helper còn cung cấp các hàm về Objects, Paths, Strings, URLs, Miscellaneous, có thể tìm hiểu từ từ và dần dần ở trang tài liệu về laravel

Các hàm hỗ trợ trong Laravel với Array

array_add()

Chức năng: Thêm 1 cặp key=>value vào trong một mảng, nếu key chưa tồn tại trong mảng.

$array = array_add(['name' => 'Desk'], 'price', 100);

// ['name' => 'Desk', 'price' => 100]

array_collapse()

Chức năng: MÌnh hay gọi nó gọi là duỗi thẳng mảng, đấy là gọi thế thôi, chứ chức năng của nó là biến một mảng các mảng thành một mảng đơn. Hay nói cách khác là biến mảng đa chiều thành mảng một chiều.

$array = array_collapse([[1, 2, 3], [4, 5, 6], [7, 8, 9]]);

// [1, 2, 3, 4, 5, 6, 7, 8, 9]

array_divide()

Chức năng: Hàm này sẽ chia mảng ra làm hai thành mảng, một mảng chứa các key, một mảng chứa các value của mang.

list($keys, $values) = array_divide(['name' => 'Desk']);

// $keys: ['name']

// $values: ['Desk']

array_dot()

Chức năng: Hàm này thì cũng duỗi thẳng mảng, nhưng khác với collapse() duổi các value, nó duỗi thẳng các key , và các key được cấp với nhau bằng dấu chấm.

$array = ['products' => ['desk' => ['price' => 100]]];

$flattened = array_dot($array);

// ['products.desk.price' => 100]

array_except()

Chức năng: Hàm này loại bỏ một cặp key=>value ra khỏi mảng, với biến đầu vào là key truyền vào.

$array = ['name' => 'Desk', 'price' => 100];

$filtered = array_except($array, ['price']);

// ['name' => 'Desk']

array_first()

Chức năng: trả về thành phần đầu tiên thỏa mãn điều kiện test

$array = [100, 200, 300];

$first = array_first($array, function ($value, $key) {
    return $value >= 150;
});

// 200

Cụ thể định nghĩa của nó với cấu trúc như sau:

$first = array_first($array, $callback, $default);

array_flatten()

Chức năng: Lại một hảm duỗi mảng nữa. Duỗi các giá trị của mảng thành một mảng, mà không quan tâm đến keys,

$array = ['name' => 'Joe', 'languages' => ['PHP', 'Ruby']];

$flattened = array_flatten($array);

// ['Joe', 'PHP', 'Ruby'] (với các key lần lượt là 0, 1, 2)

array_forget()

Chức năng: Xóa một cặp key=>value trong nested array sử dụng dấu chấm. Trước đó chúng ta có hàm array_dot() r nhở.

$array = ['products' => ['desk' => ['price' => 100]]];

array_forget($array, 'products.desk');

// ['products' => []]

array_get()

Chức năng: lấy dữ liệu của mảng bởi key, key có thể sử dụng "dot" với các nested array

$array = ['products' => ['desk' => ['price' => 100]]];

$price = array_get($array, 'products.desk.price');

// 100

Hàm này có thể truyền giá trị default, khi mà array_get trả về null

$discount = array_get($array, 'products.desk.discount', 0);

// 0

array_has()

Chức năng: check xem có thành phần nào đó trong mảng không, với tham số đầu vào là mảng và key được truyền vào, thì xem mảng có thành phần có key là key được truyền vào hay không?

$array = ['product' => ['name' => 'Desk', 'price' => 100]];

$contains = array_has($array, 'product.name');

// true

$contains = array_has($array, ['product.price', 'product.discount']);

// false

array_last()

Chức năng: Hàm này ngược với hàm array_first(), nó lấy về giá trị cuối cùng phù hợp với điều kiện test.

array_only()

Chức năng: Lấy các cặp key=>value thỏa mãn các key truyền vào của mảng. Khó hiểu nhìn code cái dễ hiểu ngay

$array = ['name' => 'Desk', 'price' => 100, 'orders' => 10];

$slice = array_only($array, ['name', 'price']);

// ['name' => 'Desk', 'price' => 100]
đấy, nó lấy ra mảng có key là 'name', và 'price' thôi 

array_pluck()

Chức năng: Lấy các giá trị của key từ mảng. Đọc thấy viết như shit, thôi thì nhìn xuống code example để hiểu nhé.

$array = [
    ['developer' => ['id' => 1, 'name' => 'Taylor']],
    ['developer' => ['id' => 2, 'name' => 'Abigail']],
];

$names = array_pluck($array, 'developer.name');

// ['Taylor', 'Abigail']
Có thể dùng: 
$names = array_pluck($array, 'developer.name', 'developer.id');

// [1 => 'Taylor', 2 => 'Abigail']

array_prepend()

Chức năng: đẩy một giá trị , hay còn gọi là một thành phần vào ví trí đầu tiên của mảng

$array = ['one', 'two', 'three', 'four'];

$array = array_prepend($array, 'zero');

// ['zero', 'one', 'two', 'three', 'four']
Có thể dùng : 
$array = ['price' => 100];

$array = array_prepend($array, 'Desk', 'name');

// ['name' => 'Desk', 'price' => 100]
Chú ý là: giá trị đầu tiên sau $array là value, giá trị thứ hai là key. Cái này cũng được áp dụng cho array_pluck(). 

array_pull()

Chức năng: Lấy một cặp key=>value với giá trị key được truyền vào. Giá trị được lấy ra, và mảng cũ bị biến đổi. (đọc thấy ngu ngu)

$array = ['name' => 'Desk', 'price' => 100];

$name = array_pull($array, 'name');

// $name: Desk

// $array: ['price' => 100]

Chú ý là có thể gán giá trị default cho giá trị trả về bởi array_pull

$value = array_pull($array, $key, $default);

array_random()

Chức năng: trả về giá trị ngẫu nhiên từ mảng. Nhắc đến giá trị ngẫu nhiên, nhớ đến bài giá trị ngẫu nhiên có thật sự ngẫu nhiên của anh Kiên đi nắng. Đọc mà hoa hết mắt.

$array = [1, 2, 3, 4, 5];

$random = array_random($array);

// 4 - (retrieved randomly)
Có thể lấy số phần tử random 
$items = array_random($array, 2);

// [2, 5] - (retrieved randomly)

array_set()

Chức năng: Đặt giá trị cho một key được truyền vào, nếu mảng là mảng nested, thì có thể sử "dot" để truy cập

$array = ['products' => ['desk' => ['price' => 100]]];

array_set($array, 'products.desk.price', 200);

// ['products' => ['desk' => ['price' => 200]]]

array_sort()

Chức năng: Sắp xếp mảng theo giá trị tăng dần.

$array = ['Desk', 'Table', 'Chair'];

$sorted = array_sort($array);

// ['Chair', 'Desk', 'Table']
Với key=>value thì làm như sau: 
$array = [ ['name' => 'Desk'], ['name' => 'Table'], ['name' => 'Chair'], ]; $sorted = array_values(array_sort($array, function ($value) { return $value['name']; })); /*
    [
        ['name' => 'Chair'],
        ['name' => 'Desk'],
        ['name' => 'Table'],
    ]
*/

array_sort_recursive()

$array = [
    ['Roman', 'Taylor', 'Li'],
    ['PHP', 'Ruby', 'JavaScript'],
];

$sorted = array_sort_recursive($array);

/*
    [
        ['Li', 'Roman', 'Taylor'],
        ['JavaScript', 'PHP', 'Ruby'],
    ]
*/

Trên là example code, cơ mà mình chưa hiểu. Sẽ tìm hiểu thêm.

array_where()

Chức năng: Filter theo điều kiện


$array = [100, '200', 300, '400', 500];

$filtered = array_where($array, function ($value, $key) {
    return is_string($value);
});

// [1 => 200, 3 => 400]

array_wrap()

Chức năng: Wrap giá trị thành mảng.

$string = 'Laravel';

$array = array_wrap($string);

// ['Laravel']
Thường thì mình hay làm như này 
$array = [$string];
0