Hướng dẫn dùng last key trong PHP

Trong hướng dẫn này, tôi sẽ liệt kê một danh sách các hàm phổ biến về mảng trong PHP với các ví dụ về cách sử dụng và cách làm tốt nhất. Mỗi nhà phát triển PHP phải biết sử dụng chúng như thế nào và cách kết hợp các hàm mảng để làm cho code dễ đọc và ngắn gọn.

Ngoài ra, còn có một bài thuyết trình đi kèm với các code ví dụ, do đó bạn có thể tải xuống từ các liên kết liên quan và đưa nó cho đồng nghiệp của bạn xem để xây dựng một đội ngũ mạnh mẽ hơn.

Cơ bản

Hãy bắt đầu với các hàm cơ bản làm việc với các khoá và giá trị của mảng. Một trong số chúng là array_combine(), nó tạo ra một mảng bằng cách sử dụng các khoá của một mảng và các giá trị của một mảng khác:

$keys = ['sky', 'grass', 'orange'];
$values = ['blue', 'green', 'orange'];

$array = array_combine($keys, $values);
print_r($array);

// Array
// (
//     [sky] => blue
//     [grass] => green
//     [orange] => orange
// )

Bạn chắc đã biết, hàm array_values​​() trả về một mảng các giá trị đã được lập chỉ mục, array_keys() trả về một mảng các khoá của một mảng cho trước, và array_flip() đổi chỗ các khoá với các giá trị:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )

Làm cho Code của Bạn Ngắn hơn

Hàm list(), nó không thực sự là một hàm, mà là một cấu trúc ngôn ngữ, được thiết kế để gán các biến theo một cách ngắn gọn. Ví dụ, đây là một ví dụ cơ bản về việc sử dụng hàm

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
6:

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;

Cấu trúc này hoạt động một cách hoàn hảo với các hàm như

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
7 hoặc
// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
8. Ngoài ra, bạn có thể bỏ qua một số tham số, nếu bạn không cần chúng phải được định nghĩa:

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world

Ngoài ra,

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
6 có thể được sử dụng với
$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
0, nó làm cho cấu trúc này thậm chí còn tốt hơn:

$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}

Với hàm extract(), bạn có thể xuất một mảng kết hợp thành các biến. Đối với mỗi phần tử của một mảng, một biến sẽ được tạo ra với tên của một khóa và giá trị như là một giá trị của biến:

$array = [
    'clothes' => 't-shirt',
    'size'    => 'medium',
    'color'   => 'blue',
];

extract($array);

echo("$clothes $size $color"); // t-shirt medium blue

Hãy lưu ý rằng

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
1 là không an toàn nếu bạn làm việc với dữ liệu người dùng (như kết quả của các yêu cầu), do đó tốt hơn là sử dụng hàm này với cờ
$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
2 và
$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
3.

Ngược lại với hàm trước đó là hàm compact(), nó tạo ra một mảng kết hợp từ các biến:

$clothes = 't-shirt';
$size = 'medium';
$color = 'blue';

$array = compact('clothes', 'size', 'color');
print_r($array);

// Array
// (
//     [clothes] => t-shirt
//     [size] => medium
//     [color] => blue
// )

Các Hàm Lọc

Có một hàm tuyệt vời để lọc mảng, và nó được gọi là array_filter(). Truyền mảng vào như là tham số đầu tiên và một hàm ẩn danh làm tham số thứ hai. Trả về

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
4 trong một hàm callback nếu bạn muốn để lại phần tử này trong mảng, và
$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
5 nếu bạn không muốn:

$numbers = [20, -3, 50, -99, 55];

$positive = array_filter($numbers, function($number) {
    return $number > 0;
});

print_r($positive); // [0 => 20, 2 => 50, 4 => 55]

Có một cách để lọc không chỉ bởi các giá trị. Bạn có thể sử dụng

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
6 hoặc
$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
7 như là một tham số thứ ba để truyền khoá hoặc cả giá trị và khoá vào hàm callback.

Đồng thời, bạn có thể gọi

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
8 mà không cần một callback để loại bỏ tất cả các giá trị rỗng:

$numbers = [-1, 0, 1];

$not_empty = array_filter($numbers);

print_r($not_empty); // [0 => -1, 2 => 1]

Bạn có thể nhận được các giá trị duy nhất từ ​​một mảng bằng cách sử dụng hàm array_unique(). Lưu ý rằng hàm này sẽ bảo lưu các khoá của các phần tử duy nhất đầu tiên:

$array = [1, 1, 1, 1, 2, 2, 2, 3, 4, 5, 5];
$uniques = array_unique($array);

print_r($uniques);

// Array
// (
//     [0] => 1
//     [4] => 2
//     [7] => 3
//     [8] => 4
//     [9] => 5
// )

Với array_column(), bạn có thể nhận được một danh sách các giá trị cột từ một mảng đa chiều, giống như một câu trả lời từ cơ sở dữ liệu SQL hoặc một import (nhập) từ một tập tin CSV. Chỉ cần truyền vào một mảng và tên cột:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
0

Bắt đầu từ PHP 7,

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
9 còn trở nên mạnh mẽ hơn, bởi vì bây giờ nó được phép làm việc với một mảng các đối tượng. Vì vậy, làm việc với một mảng các model trở nên dễ dàng hơn:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
1

Duyệt qua các Mảng

Sử dụng array_map(), bạn có thể áp dụng một callback cho mỗi phần tử của một mảng. Bạn có thể truyền một tên hàm hoặc hàm ẩn danh để có được một mảng mới dựa trên mảng đã cho:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
2

Có một truyền thuyết kể rằng không có cách nào để truyền các giá trị và các khoá của một mảng vào một callback, nhưng chúng ta có thể phá vỡ điều đó:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
3

Nhưng điều này có vẻ không tốt. Tốt hơn là sử dụng array_walk() để thay thế. Hàm này trông giống như

$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
0, nhưng cách hoạt động khác. Trước hết, một mảng được truyền bằng một tham chiếu, do đó,
$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
1 không tạo ra một mảng mới, mà thay đổi mảng đã cho. Vì vậy, với một mảng nguồn, bạn có thể truyền giá trị mảng bằng một tham chiếu trong một callback. Các khoá của mảng cũng có thể được truyền một cách dễ dàng:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
4

Trộn các Mảng

Cách tốt nhất để hợp nhất hai hoặc nhiều mảng trong PHP là sử dụng hàm array_merge(). Các phần tử của các mảng sẽ được hợp nhất lại với nhau, và các giá trị với cùng một khoá sẽ bị ghi đè bằng giá trị cuối cùng:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
5

Để loại bỏ các giá trị của mảng khỏi một mảng khác (hoặc các mảng), hãy sử dụng array_diff(). Để lấy các giá trị có trong các mảng cho trước, sử dụng array_intersect(). Các ví dụ tiếp theo sẽ cho thấy nó hoạt động như thế nào:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
6

Làm toán Với các Giá trị của Mảng

Sử dụng array_sum() để lấy tổng các giá trị của mảng, array_product() để nhân chúng, hoặc tạo công thức của riêng bạn với array_reduce():

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
7

Để đếm tất cả các giá trị của một mảng, sử dụng array_count_values​​(). Nó sẽ cung cấp cho bạn tất cả các giá trị duy nhất của một mảng cho trước như là các khoá và kết quả đếm các giá trị này như là một giá trị:

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
8

Tạo Mảng

Để tạo ra một mảng với một kích thước nhất định và giá trị như nhau, sử dụng array_fill():

print_r(array_keys($array)); // ['sky', 'grass', 'orange']
print_r(array_values($array)); // ['blue', 'green', 'orange']
print_r(array_flip($array));

// Array
// (
//     [blue] => sky
//     [green] => grass
//     [orange] => orange
// )
9

Để tạo một mảng với một dãy khóa và giá trị, giống như giờ trong ngày hoặc các ký tự, hãy sử dụng range():

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
0

Để lấy một phần của mảng, ví dụ, chỉ ba phần tử đầu tiên—sử dụng array_slice():

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
1

Sắp xếp Mảng

Nên nhớ rằng mọi hàm sắp xếp trong PHP đều hoạt động với các mảng bằng một tham chiếu và trả về true nếu thành công hoặc false nếu thất bại. Có một hàm sắp xếp cơ bản được gọi là sort(), và nó sắp xếp các giá trị theo thứ tự tăng dần mà không bảo lưu các khóa. Hàm sắp xếp có thể được thêm vào trước bằng các ký tự sau:

  • a, sắp xếp bảo lưu các khoá
  • k, sắp xếp theo các khoá
  • r, sắp xếp theo chiều ngược lại/giảm dần theo thứ tự
  • u, sắp xếp với một hàm người dùng

Bạn có thể thấy các kết hợp của các chữ cái này trong bảng sau:

akruaasort
arsortuasortkksortkrsortrarsortkrsortrsortuuasort
usort

Kết hợp các Hàm Mảng Một cách Chuyên nghiệp

Ma thuật thật sự bắt đầu khi bạn kết hợp các hàm mảng. Dưới đây là cách bạn có thể cắt và xóa các giá trị rỗng chỉ bằng một dòng code với

$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
8 và
$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
0:

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
2

Để tạo một id cho một bản đồ tiêu đề từ một mảng các model, chúng ta có thể sử dụng một sự kết hợp của

$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
4 và
$string = 'hello|wild|world';
list($hello, , $world) = explode('|', $string);
echo("$hello, $world"); // hello, world
9:

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
3

Để có được ba giá trị đầu tiên của một mảng, chúng ta có thể sử dụng

$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
6,
$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
7 và
$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
8:

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
4

Rất dễ sử dụng

$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
9 và
$arrays = [[1, 2], [3, 4], [5, 6]];

foreach ($arrays as list($a, $b)) {
    $c = $a + $b;
    echo($c . ', '); // 3, 7, 11, 
}
0 để tính tổng theo thứ tự trong một vài dòng:

// define array
$array = ['a', 'b', 'c'];

// without list()
$a = $array[0];
$b = $array[1];
$c = $array[2];

// with list()
list($a, $b, $c) = $array;
5

Tóm tắt

Như bạn thấy đó, kiến ​​thức về các hàm chính để thao tác mảng có thể làm cho code của bạn trở nên ngắn gọn hơn và dễ đọc hơn. Tất nhiên, PHP có nhiều hơn các hàm mảng này, và ngay cả các hàm đã cho cũng có nhiều biến thể để sử dụng với các tham số và cờ, nhưng tôi nghĩ rằng trong hướng dẫn này, chúng ta đã khái quát những điều cơ bản mà mọi nhà phát triển PHP nên biết.

Xin hãy lưu ý rằng tôi đã tạo một bản thuyết trình với các ví dụ đã cho, do đó bạn có thể tải xuống từ các liên kết có liên quan và đưa ra cho nhóm của bạn xem.