Làm việc với các chuỗi, số và biểu thức chính quy trong PHP tương đối dễ dàng với số lượng lớn các hàm mà ngôn ngữ này cung cấp
Tuy nhiên, đôi khi việc tìm ra cách phân chia theo một số tiêu chí nhất định có thể không rõ ràng ngay lập tức hoặc có thể rõ ràng bạn cần làm gì nhưng không biết cách thực hiện tốt nhất.
Ảnh của Agê Barros trên Bapt
Ví dụ: giả sử bạn có một chuỗi chứa cả số và chữ số. Đối với bài đăng này, giả sử rằng một chuỗi đã cho
- bao gồm giờ và phút,
- khi số phút là 60,
- chuỗi sẽ tăng giá trị của số giờ lên một
- giá trị của phút được đặt lại về không
Sau đó, một ví dụ, chuỗi có vấn đề, có thể có dạng T3H60M. Làm thế nào sau đó chúng ta có thể chia chuỗi thành các chuỗi và số nguyên và xây dựng lại nó đúng cách?
Tách chuỗi và số nguyên trong PHP
Trong trường hợp này, có ba điều tôi thấy hữu ích. Không theo thứ tự đặc biệt
- một biểu thức chính quy
- preg_split
- mảng_bộ lọc
- mảng_giá_trị
Và thứ tự các hoạt động sử dụng từng thứ ở trên diễn ra như thế này
- sử dụng biểu thức chính quy để tìm tất cả các chữ số trong chuỗi,
- xóa mọi thứ trừ các chữ số trong mảng
- nếu chữ số thứ hai là 60, thì đặt nó bằng 0
- tăng chỉ số đầu tiên của mảng lên một
- xây dựng lại chuỗi
Nếu các bước trên được chuyển đổi thành mã,
Xem mã trên Gist
Lưu ý rằng tôi chọn sử dụng array_filter để loại bỏ các giá trị trùng lặp và sử dụng array_values để xóa mảng chỉ thành hai mục, mục đầu tiên là giờ, mục thứ hai là phút
Sau đó, tôi xác định giá trị của từng chỉ mục của mảng [và hãy nhớ rằng chúng là các chuỗi nên bạn sẽ phải nhập chúng dưới dạng số nguyên để tăng giá trị của chúng một cách thích hợp
Cuối cùng, tôi xây dựng chuỗi khi [và nếu] cần thiết
Chắc chắn, đây là một trường hợp nhỏ, nhưng giải pháp có thể được tổng quát hơn dựa trên nhu cầu của riêng bạn
❮ Tham chiếu chuỗi PHP
Ví dụ
Tách chuỗi "Xin chào" thành một mảng
print_r[str_split["Xin chào"]];
?>
Định nghĩa và cách sử dụng
Hàm str_split[] tách một chuỗi thành một mảng
cú pháp
Giá trị tham số
Tham sốChuỗi mô tảBắt buộc. Chỉ định chuỗi thành splitlengthOptional. Chỉ định độ dài của mỗi phần tử mảng. Mặc định là 1chi tiết kỹ thuật
Giá trị trả về. Nếu độ dài nhỏ hơn 1, hàm str_split[] sẽ trả về FALSE. Nếu độ dài lớn hơn độ dài của chuỗi, toàn bộ chuỗi sẽ được trả về dưới dạng phần tử duy nhất của mảng. Phiên bản PHP. 5+Thêm ví dụ
Ví dụ
Sử dụng tham số chiều dài
print_r[str_split["Xin chào",3]];
?>
Actually, this version is better than the last I submitted. The goal here is to be able to engage in *multiple* delimeter removal passes; for all but the last pass, set the third value to "1", and everything should go well.
function quotesplit[ $splitter=',', $s, $restore_quotes=0 ]
{
//First step is to split it up into the bits that are surrounded by quotes
//and the bits that aren't. Adding the delimiter to the ends simplifies
//the logic further down
$getstrings = explode['"', $splitter.$s.$splitter];
//$instring toggles so we know if we are in a quoted string or not
$delimlen = strlen[$splitter];
$instring = 0;
while [list[$arg, $val] = each[$getstrings]]
{
if [$instring==1]
{
if[ $restore_quotes ]
{
//Add the whole string, untouched to the previous value in the array
$result[count[$result]-1] = $result[count[$result]-1].'"'.$val.'"';
} else {
//Add the whole string, untouched to the array
$result[] = $val;
}
$instring = 0;
}
else
{
//Break up the string according to the delimiter character
//Each string has extraneous delimiters around it [inc the ones we added
//above], so they need to be stripped off
$temparray = split[$splitter, substr[$val, $delimlen, strlen[$val]-$delimlen-$delimlen+1 ] ];
while[list[$iarg, $ival] = each[$temparray]]
{
$result[] = trim[$ival];
}
$instring = 1;
}
}
return $result;
}