2012-09-13 33 views
5

Tôi đang tìm cách tách một chuỗi kiểu alpha-số unicode thành các lenghts cố định. ví dụ:Tách chuỗi theo độ dài cố định

 

    992000199821376John Smith   20070603 

và mảng sẽ trông như thế này:

Array (
[0] => 99, 
[1] => 2, 
[2] => 00019982, 
[3] => 1376, 
[4] => "John Smith", 
[5] => 20070603 
) 

dữ liệu mảng sẽ được chia như thế này:

 
    Array[0] - Account type - must be 2 characters long, 
    Array[1] - Account status - must be 1 character long, 
    Array[2] - Account ID - must be 8 characters long, 
    Array[3] - Account settings - must be 4 characters long, 
    Array[4] - User Name - must be 20 characters long, 
    Array[5] - Join Date - must be 8 characters long. 
+0

Ngôn ngữ đích là gì? – dasblinkenlight

+0

php .. sry quên đề cập đến –

+0

Thêm thẻ cho câu hỏi của bạn hiển thị tốt hơn. – dasblinkenlight

Trả lời

2

Hoặc nếu bạn muốn tránh preg:

$string = '992000199821376John Smith   20070603'; 
$intervals = array(2, 1, 8, 4, 20, 8); 

$start = 0; 
$parts = array(); 

foreach ($intervals as $i) 
{ 
    $parts[] = mb_substr($string, $start, $i); 

    $start += $i; 
} 
+0

Sử dụng khoảng thời gian làm cho nó dễ bảo trì hơn nhiều. 1 cho giải pháp này. –

+0

Rất tiếc, không hoạt động. Tách theo đơn vị mã trong trường hợp unicode, không phải ký tự. –

+0

Còn về '$ parts [] = mb_substr ($ string, $ start, $ i, mb_detect_encoding ($ string));'? – noj

0
$s = '992000199821376Николай Шмидт  20070603'; 

    if (preg_match('~(.{2})(.{1})(.{8})(.{4})(.{20})(.{8})~u', $s, $match)) 
    { 
     list (, $type, $status, $id, $settings, $name, $date) = $match; 
    } 
0

Sử dụng chức năng substr sẽ làm gì điều này khá dễ dàng.

$accountDetails = "992000199821376John Smith   20070603"; 
$accountArray = array(substr($accountDetails,0,2),substr($accountDetails,2,1),substr($accountDetails,3,8),substr($accountDetails,11,4),substr($accountDetails,15,20),substr($accountDetails,35,8)); 

Nên thực hiện thủ thuật, khác với cụm từ thông dụng (theo đề xuất của akond) có lẽ là cách để đi (và linh hoạt hơn). (Hình này vẫn hợp lệ như một lựa chọn thay thế).

0

Nó không thể tách một chuỗi unicode trong một cách mà bạn yêu cầu.

Không thể thực hiện mà không làm cho các bộ phận không hợp lệ. Một số điểm mã không có cách nào nổi bật, ví dụ: שׁ là 2 điểm mã (và 4 byte trong UTF-8 và UTF-16) và bạn không thể chia nhỏ vì nó không được xác định.

Khi bạn làm việc với unicode, "ký tự" là một thuật ngữ rất trơn. Có các điểm mã, dấu gạch ngang, v.v. Xem thêm tại http://www.utf8everywhere.org, phần trên "chiều dài của chuỗi"

+1

+1. Unicode là rất tốt cho một số thứ, nhưng phức tạp xử lý chuỗi rất nhiều. (Bạn có chắc chắn rằng nó "không thể" mặc dù? Có lẽ chỉ "rất khó khăn"?) – ghoti

+0

Có, ghoti, những gì được hỏi là không thể. Tôi nghĩ tôi đã giải thích tại sao, phải không? –

Các vấn đề liên quan