Pages

Thursday, March 29, 2018

[PHP basic] Chuyển string sang array với split(), str_split(), explode() và pre_split()

Vốn dĩ một chuỗi string trong PHP có thể coi là một array, nhưng chuỗi này chuyển sang array lại dựa vào số byte, và một cách nào đấy có thể tạm nói rằng, khi chuyển qua array thì dựa vào character.

Ví dụ "hello world" thì khi loop với for ta được h-e-l-l-o-[space]-w-o-r-l-d.

Giờ ta muốn tách chuỗi theo các nhu cầu khác thì sao? PHP có sẵn 4 hàm split(), str_split(), explode() và pre_split() để chuyển sang array.

1) split() chú ý là hàm này đã bị loại bỏ trên PHP7, vẫn dùng được trên PHP5 nhưng sẽ có warning lỗi. PHP4 thì okey.

2) str_split() sinh ra để thay thế split() với tính năng tương tự, hoạt động okey trên PHP7.

str_split(string,length) . Như vậy delimiter nằm phía phải, đơn vị là số.

Diễn giải: hàm str_split() sẽ tách chuỗi thành array và việc tách chuỗi này tính theo số lượng character được quy định trong delimiter. Mặc định nếu không truyền vào là 1.

Giả sử:

$str = "This is a text which will be used to do something.";

print_r(str_split($str, 1)); // Array ( [0] => T [1] => h [2] => i [3] => s [4] => [5] => i [6] => s [7] => [8] => a [9] => [10] => t [11] => e [12] => x [13] => t [14] => [15] => w [16] => h [17] => i [18] => c [19] => h [20] => [21] => w [22] => i [23] => l [24] => l [25] => [26] => b [27] => e [28] => [29] => u [30] => s [31] => e [32] => d [33] => [34] => t [35] => o [36] => [37] => d [38] => o [39] => [40] => s [41] => o [42] => m [43] => e [44] => t [45] => h [46] => i [47] => n [48] => g [49] => .

print_r(str_split($str, 5));//Array ( [0] => This [1] => is a [2] => text [3] => which [4] => will [5] => be u [6] => sed t [7] => o do [8] => somet [9] => hing. )

 3) explode() cắt string theo string.

cú pháp: explode ( string $delimiter , string $string [, int $limit ] ).

Như vậy delimiter nằm phía trái. Việc chuyển chuỗi sang array tính theo chính character, không phải theo số lượng character như làm str_split(). Mặc định tham số thứ 2 của hàm str_split() là 1 nên không cần truyền vào tham số thứ 2 nếu muốn chuyển chuỗi dựa vào 1 character, nhưng explode() bắt buộc phải có delimiter.

ví dụ 1:

$str = "This is a text which will be used to do something.";

print_r(explode("t",$str)); //Array ( [0] => This is a [1] => ex [2] => which will be used [3] => o do some [4] => hing. ) 

ví dụ 2:
$str = "dạy nhau học";

print_r(explode("h", $str));//Array ( [0] => dạy n [1] => au [2] => ọc )

Ví dụ 3: 
$str = "Dạy |sớm |dạy| nhau| học";

print_r(explode("|",$str));//Array ( [0] => Dạy [1] => sớm [2] => dạy [3] => nhau [4] => học )

Nhìn ví dụ 3 sẽ thấy một đặc điểm quan trọng của explode() là nó sẽ xóa chính character là delimiter sau khi convert. Mình hay dùng cái này nhất để tách dữ liệu text và chuyển vào database.



Mình tham khảo tại: https://dotoplay.wordpress.com/2015/08/20/differences-between-str_split-and-explode-in-php/