2011-01-20 24 views
5

Tôi có một mảng trong nhiều thángphp mảng cư xử kỳ lạ với giá trị then chốt 07 & 08

$months[01] = 'January'; 
$months[02] = 'February'; 
$months[03] = 'March'; 
$months[04] = 'April'; 
$months[05] = 'May'; 
$months[06] = 'June'; 
$months[07] = 'July'; 
$months[08] = 'August'; 
$months[09] = 'September'; 
$months[10] = 'October'; 
$months[11] = 'November'; 
$months[12] = 'December'; 

Bây giờ mảng không giá trị chính xác không đầu ra cho khóa 07 & 08.

Hãy thử thực hiện print_r($months) bạn sẽ không nhận được bất kỳ giá trị khóa August và chỉ số khóa bằng 0 cho September.

Mặc dù tôi có thể giải quyết vấn đề bằng cách xóa số 0 đứng đầu, nhưng tôi vẫn muốn biết lý do tương tự.

Ngay cả trình chỉnh sửa PHP cũng phát hiện một số vấn đề nhưng không thể cho biết vấn đề là gì.

Cảm ơn

Trả lời

9

prepending 0 trước một số nghĩa PHP phân tích nó như là một giá trị bát phân trong cùng một cách mà prepending 0x làm cho nó được phân tích như một giá trị thập lục phân. Loại bỏ số không, và nó sẽ hoạt động tốt.

echo 07; // prints 7 
echo 010; // prints 8 

này thường được sử dụng khi xác định quyền unix:

chmod("myfile", 0660); 

Trừ rằng đó là hiếm khi một cái gì đó mà bạn muốn làm.

Điều này được mô tả trong các PHP Manual.

+0

Thanx, Điều này giải thích mọi thứ. –

2

Nói chung, đặt số 0 đứng đầu trên một số cho trình biên dịch biết rằng bạn đã cung cấp số bát phân (cơ sở 8, không phải cơ số 10).

Trong bát phân, 8 và 9 không tồn tại (8 là 010, 9 là 011), vì vậy bạn đang nhầm lẫn với php.

Nếu bạn thực sự muốn có một zero hàng đầu, bạn có thể sử dụng chuỗi cho danh mục của bạn

2

PHP sẽ đối xử với con số với một số 0 đầu số như bát phân, hoặc thả hàng đầu 0 hoặc đặt các giá trị quan trọng trong dấu ngoặc kép.

3

Cách bạn tạo một integer literal là quan trọng.

Xem cấu trúc cho các chữ số thập phân? Lưu ý cách một số không trước không phải là một phần của mẫu đó?

Hoặc là bạn phải loại bỏ các số không, hoặc điều trị các phím mảng của bạn như chuỗi

$months['01'] = 'January'; 
$months['02'] = 'February'; 
// etc... 
0

Tôi chỉ nhận ra điều này sau khi phút quý giá của gỡ lỗi và đầu bảng đập.
Vấn đề là PHP không gây ra lỗi hoặc thậm chí là cảnh báo về việc làm sai số nguyên bát phân. Nó chỉ bỏ qua phần từ lỗi cho đến cuối của chữ.
Chết tiệt.

PS: Ai sử dụng số bát phân? chưa bao giờ, không bao giờ nghe nói về ai đó sử dụng chúng vì một lý do chính đáng.
Hệ thập lục phân là tuyệt vời, nhưng bát phân? chỉ trích.
Ngay cả khi được phép tôi thường làm chmod ugo+rwx thì đơn giản hơn.

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