2013-09-27 371 views
6

Tôi muốn chuyển đổi một số thành chuỗi gồm 5 ký tự. Các ký tự chuỗi là a-z, A-Z và 0-9. Mỗi kết hợp của mã đó được tăng thêm bởi "1"Chuyển đổi số thành chuỗi 5 chữ số

Tôi không chắc chắn cách giải thích, vì vậy tôi sẽ cung cấp cho bạn một ví dụ. Ví dụ:

1 = aaaaa 
26 = aaaaz 
27 = aaaaA 
52 = aaaaZ 
53 = aaaa0 
62 = aaaa9 
63 = aaaba 
89 = aaabz 
90 = aaab0 

Vì vậy, nếu tôi có số 1035, có cách nào PHP có thể tính toán mã đó không?

Xin lỗi câu hỏi của tôi hơi mơ hồ.

Lý do tôi muốn làm điều này là vì tôi không muốn hiển thị id khóa cơ sở dữ liệu chính của mình, tôi muốn hiển thị định dạng base63 này.

+5

chắc. Những gì bạn đã tạo là hệ thống đánh số cơ sở tùy chỉnh đi a-zA-Z0-9. Nó thực sự là một hệ thống đánh số 63 cơ sở mà tôi cho là. Sử dụng các số ví dụ của bạn sẽ hiển thị: 63 = 00010 Thông báo trước là một số đang phân phát dưới dạng 1 VÀ 0 trong ví dụ của bạn. aaaaa = 1 trong một hệ thống đánh số lại dựa trên thực tế, nó sẽ là _ _ _ _ a = 1. –

+0

Tôi nghĩ rằng tôi hiểu ý của bạn là gì. Bạn có bất kỳ nguồn lực nào để tôi có thể đọc thêm về điều này không? –

+1

Chuyển đổi số của bạn thành cơ số 63 bình thường. Sau đó chuyển đổi từng chữ số trong kết quả thành các chữ số bạn đang sử dụng, sử dụng 'strtr()'. – Barmar

Trả lời

1

Tôi đoán bạn có thể làm một cái gì đó như thế này:

function custom_base_62($n) 
{ 
    if ($n < 1) 
     trigger_error('custom_base_62(): This silly system cannot represent zero.', E_USER_ERROR); 

    $n -= 1; 
    $symbols = array_merge(range('a', 'z'), range('A', 'Z'), range(0, 9)); 
    $r = ''; 

    while ($n) 
    { 
     $r = $symbols[$n % 62] . $r; 
     $n = floor($n/62); 
    } 

    return str_pad($r, 5, $symbols[0], STR_PAD_LEFT); 
} 
+0

Bạn vẫn sẽ xem xét nó ngớ ngẩn vì 0 không được phép trong cơ sở dữ liệu MySQL? Và đó là nơi con số đến từ đâu? –

+1

Chúng tôi đang thảo luận hai con thú khác nhau. 1 là toán học không phải là giá trị số nguyên dương thấp nhất bạn có thể có, và điều này có liên quan trong chuyển đổi cơ bản. Mặt khác, các cột auto_increment của MySQL sẽ bắt đầu bằng 1 để nhận dạng thuộc tính cho các hàng của bạn, nhưng chúng có thể bằng không nếu bạn ép buộc nó. Và trong cùng một cách 0-padding sẽ là 00001, chuyển đổi logic 1 trong cơ sở của bạn phải là 'aaaab'. – Havenard

+0

Tôi sẽ thay đổi mã của bạn ở đây sau đó để cho phép 0's :) –

1

Dưới đây là một ý tưởng bạn có thể chơi với, không hoàn toàn chắc chắn tôi hiểu mục tiêu chính xác của bạn ..

<?php 

function Digit_to_char($s){ 

    $s1 = str_split($s); 
    while(list($k,$v) = each($s1)){ 
    $s2[] = str_replace(range(0,9), array("a","b","c","d","e","f","g","h","y","z"), $v); 
    } 

    return implode('',$s2); 
} 


echo Digit_to_char(12345); // prints bcdef 

?>