Tối ưu hóa chuyển đổi thành mảng trong PHP
Không phải lúc nào cũng cần tách một chuỗi thành một mảng để thao tác với nó.
Hãy xem xét một ví dụ.
Trong ví dụ tiếp theo, tác giả mã kiểm tra xem
chuỗi có chứa chữ số 3 hay không:
<?php
$str = '12345';
$arr = explode('', $str); // tách thành mảng
if (in_array(3, $arr)) {
echo 'có';
} else {
echo 'không';
}
?>
Tác giả rất giỏi - sử dụng các hàm có sẵn của PHP thay vì viết những giải pháp tạm thời (workaround) của riêng mình.
Nhưng mã vẫn chưa tối ưu: ở đây không có
lý do gì để tách chuỗi thành mảng, bởi vì đã tồn tại
hàm strpos sẵn có, thực hiện
tìm kiếm trong chuỗi:
<?php
$str = '12345';
if (strpos($str, 3) !== false) {
echo 'có';
} else {
echo 'không';
}
?>
Tại sao việc tách thành mảng ở đây lại không tốt? Bởi vì, thứ nhất, việc tách thành mảng tiêu tốn tài nguyên của bộ xử lý, thứ hai, mảng thu được sẽ chiếm dụng bộ nhớ RAM (hơn nữa, nó sẽ nhiều hơn dung lượng mà chính chuỗi đó chiếm dụng).
Bài học: đừng tách chuỗi thành mảng nếu có cách không cần làm điều đó.
Trong mã tiếp theo, một lập trình viên nào đó đảo ngược các ký tự của chuỗi theo thứ tự ngược lại. Hãy tối ưu hóa giải pháp của lập trình viên này:
<?php
$str = '12345';
$rev = implode('', array_reverse(explode('', $str)));
echo $rev; // sẽ xuất ra '54321'
?>
Trong mã tiếp theo, một lập trình viên tìm số lượng từ trong văn bản. Hãy tối ưu hóa giải pháp của lập trình viên này:
<?php
$str = 'aaa bbb ccc'; // một chuỗi dài nào đó
echo count(explode(' ', $str));
?>