1. Hàm array_slice() trong PHP

Hàm array_slice() trong PHP cũng được dùng để cắt các phần tử trong mảng. Cụ thể hàm này sẽ trích xuất phần tử trong mảng bắt đầu từ vị trí mà ta chỉ định. Hàm sẽ lấy những phần tử từ vị trí ta chỉ định cho đến hết mảng. Thậm chí ta còn có thể sử dụng hàm array_slice() để cắt một khoảng chỉ định trong mảng với những tham số mà ta truyền vào. Với những key dạng số ta cũng có thể giữ nguyên hoặc đặt lại nó tùy vào sự lựa chọn của người dùng. Hàm array_slice() được giới thiệu và sử dụng từ phiên bản PHP 4.0

Chú ý 

Hàm này sẽ cắt theo vị trí phần tử trong mảng chứ không phải cắt theo key . Đặc biệt với key dạng số khá dễ gây nhầm lẫn cho chúng ta. Ta sẽ đếm ví trí mảng bắt đầu từ 0 , 1 , 2 , 3 , … Nếu đếm từ cuối lên sẽ là -1 , -2 , -3 , -4 , …

Hàm array_slice() sẽ không làm thay đổi mảng ban đầu mà chỉ cắt và lấy giá trị trong mảng ban đầu mà thôi.

2. Cú pháp hàm array_slice() trong PHP

Ta có cú pháp của hàm array_slice() trong PHP là :

array_slice($array, $start, $length, preserve)

Trong đó:

  • $array : mảng ban đầu mà ta muốn cắt. Tham số này là bắt buộc trong hàm
  • $start : đây là vị trí của mảng mà ta sẽ bắt đầu cắt. Ta có thể đặt tham số này là số âm hoặc số dương. Nếu là giá trị dương ta sẽ đếm vị trí từ đầu mảng xuống. Nếu là giá trị âm ta sẽ đếm vị trí từ cuối mảng lên đầu (tức là -1 sẽ tham chiếu đến phần tử cuối cùng của mảng). Ta có thể hiểu đơn giản nó là vị trí của phần tử đầu tiên được giữ lại. Tham số này cũng là bắt buộc có trong hàm
  • $length : đây là tham số để giới hạn các phần tử được cắt. Hay ta có thể hiểu $length chính là chiều dài của mảng được trả về. Ta cũng có thể truyền giá trị âm cho tham số này và lúc này hàm sẽ ngừng cắt phần tử cuối cùng. Tham số này là tùy chọn trong hàm
  • preserve : đây là tham số tùy chọn trong hàm, nhận những giá trị boolean (True hoặc False) . Tham số này cho biết có giữ lại key của phần tử hay không. Nếu là True thì hàm sẽ giữ nguyên key của các phần tử, ngược lại False sẽ thay đổi các key của các phần tử. Giá trị mặc định của tham số này là False. Tham số này chỉ có tác dụng với key dạng số , còn key dạng chuỗi vẫn giữ nguyên dù có là True hay False.

Giá trị trả về là các phần tử được cắt từ mảng truyền vào với những tham số truyền vào hàm array_slice() như trên.

  • Nếu $length được cung cấp và là dương, thì dãy này sẽ có $length phần tử được cắt bắt đầu từ $start .
  • Nếu $length được cung cấp và là âm, thì dãy sẽ dừng ở các phần tử đó từ cuối mảng. Có nghĩa là nếu là -1 thì hàm sẽ không cắt phần tử cuối cùng. Nếu là -2 hàm không cắt 2 phần tử cuối cùng. Nếu là -3 thì hàm không cắt 3 phần tử cuối cùng…
  • Nếu $length lớn hơn số lượng phần tử tối đa của mảng hay không tồn tại thì hàm sẽ lấy từ $start tới hết mảng.
  • Nếu $length bị bỏ qua thì hàm array_slice() sẽ cắt từ $start đến hết mảng.

Ví dụ : cắt từ phần tử thứ hai trong mảng và trả về phần tử đã cắt

<?php
$a=array("red","green","blue","yellow","brown");
echo '<pre>';
print_r(array_slice($a,2));
?>

Kết quả

Array
(
    [0] => blue
    [1] => yellow
    [2] => brown
)

Ta cần lưu ý đếm vị trí mảng sẽ bắt đầu từ 0 nhé. Và trong ví dụ này do mình không truyền thêm tham số $length nên hàm sẽ mặc định cắt và lấy các phần tử từ vị trí thứ 2 đến hết mảng. Kết quả hiển thị sẽ như trên.

3. Ví dụ về hàm array_slice() trong PHP

Ví dụ 1: cắt từ phần tử vị trí thứ hai và trả về ba phần tử

<?php
$a=array("PHP","Java","Python","HTML","CSS","C");
echo '<pre>';
print_r(array_slice($a,2,3));
?>

Kết quả

Array
(
    [0] => Python
    [1] => HTML
    [2] => CSS
)

Với việc lấy từ phần tử ở vị trí thứ hai ta chỉ cần truyền tham số 2 cho hàm array_slice() .Và chỉ muốn trả về 3 phần tử thì ở đây ta truyền thêm tham số $length là 3 . Kết quả sẽ hiển thị giống như trên nhé.

Ví dụ 2: truyền vào hàm những tham số âm

<?php
$a=array("PHP","Java","Python","HTML","CSS","C");
echo '<pre>';
print_r(array_slice($a,-3,2));
?>

Kết quả

Array
(
    [0] => HTML
    [1] => CSS
)

Với tham số $start-3 ta sẽ đếm từ cuối mảng lên để tìm được vị trí chính xác nhé. Vị trí phần tử cuối cùng của mảng sẽ là -1 . Cùng với đó là sẽ chỉ lấy 2 phần tử.

Ví dụ 3:

<?php
$a=array("PHP","Java","Python","HTML","CSS","C");
echo '<pre>';
print_r(array_slice($a,1,-2));
?>

Kết quả

Array
(
    [0] => Java
    [1] => Python
    [2] => HTML
)

Với việc $length mang giá trị -2 thì hàm array_slice() sẽ không cắt hai phần tử cuối cùng của mảng.

Ví dụ 4:

<?php
// Preserve được đặt thành True:
$a=array("PHP","Java","Python","HTML","CSS","C");
echo '<pre>';
print_r(array_slice($a,1,2,true));

// preserve được đặt là False (mặc định):
$a=array("PHP","Java","Python","HTML","CSS","C");
echo '<pre>';
print_r(array_slice($a,1,2,false));

?>

Kết quả

Array
(
    [1] => Java
    [2] => Python
)
Array
(
    [0] => Java
    [1] => Python
)

Với việc đặt tham số preserve thành True thì key của những giá trị được cắt sẽ giống như key của chúng trong mảng ban đầu. Với việc đặt preserve là giá trị mặc định là False thì những key này sẽ được đặt lại theo thứ tự tăng dần bắt đầu từ 0

Ví dụ 5: Thao tác với key dạng chuỗi

<?php
$a=array("a"=>"PHP","b"=>"Java","c"=>"Python","d"=>"HTML","e"=>"CSS");
echo '<pre>';
print_r(array_slice($a,1,2));

$a=array("a"=>"PHP","b"=>"Java","c"=>"Python","d"=>"HTML","e"=>"CSS");
echo '<pre>';
print_r(array_slice($a,1,-1,True));
?>

Kết quả

Array
(
    [b] => Java
    [c] => Python
)
Array
(
    [b] => Java
    [c] => Python
    [d] => HTML
)