2009-05-19 38 views
17

Sự khác biệt giữa $ str [n] và $ str {n}, cho rằng $ str là một chuỗi.PHP: lập chỉ mục chuỗi

Tôi nhận thấy rằng cả hai dường như hoạt động giống nhau, ngoại trừ {} không xảy ra trong bất kỳ tài liệu nào tôi tìm thấy.

+0

tôi tìm thấy nó trong [tài liệu chuỗi] (http://php.net /manual/en/language.types.string.php#language.types.string.substr): "Lưu ý: Các chuỗi cũng có thể được truy cập bằng cách sử dụng dấu ngoặc, như trong' $ str {42} ', cho cùng một mục đích." (nhưng như đã nêu trong câu trả lời, cú pháp '[]' là một lựa chọn tốt hơn) –

+0

Chủ đề cũng được thảo luận về câu hỏi này: [Lấy ký tự đầu tiên của chuỗi có $ str \ [0 \]] (http://stackoverflow.com/questions/1972100/getting-the-first-character-of-a-string-with-str0). –

Trả lời

27

Chúng giống nhau. Tuy nhiên, chúng đang loại bỏ cú pháp {}, vì vậy bạn nên đi với [].

According to the manual:

Nhân vật trong chuỗi có thể được truy cập và sửa đổi bằng cách xác định zero-based bù đắp của nhân vật mong muốn sau khi chuỗi sử dụng dấu ngoặc mảng vuông, như trong $str[42]. Hãy nghĩ về một chuỗi như một mảng các ký tự cho mục đích này. Các chức năng substr()substr_replace() có thể được sử dụng khi bạn muốn trích xuất hoặc thay thế nhiều hơn 1 ký tự.

Lưu ý: Kể từ phiên bản 7.1.0, chênh lệch chuỗi âm cũng được hỗ trợ. Các giá trị này xác định độ lệch từ phần cuối của chuỗi. Trước đây, số dư âm phát ra E_NOTICE để đọc (cho ra một chuỗi trống) và E_WARNING để viết (để nguyên chuỗi bị ảnh hưởng).

Lưu ý: Các chuỗi cũng có thể được truy cập bằng niềng răng, như trong $str{42}, cho cùng một mục đích.

+3

Niềng răng '{}' là di sản từ băm Perl, và đang bị bỏ rơi. – Kekoa

10

Hãy cẩn thận, $str[n]$str{n} cho Byte n-thứ của String, không nhân vật n-thứ của String. Đối với mã hóa nhiều byte (UTF-8, v.v.), một ký tự không cần phải là một Byte.

$str{0} - Byte đầu tiên của chuỗi

mb_substr($str, 0, 1) - ký tự đầu tiên của chuỗi (bao gồm cả bảng mã multibyte)

http://php.net/mb_substr

+0

Cần lưu ý rằng ** trước PHP 5.6 ** mã hóa mặc định của mô-đun [mbstring] (http://php.net/mbstring) không phải là UTF-8 - điều này có thể được thay đổi ở hai nơi: trong tập lệnh php ' mb_internal_encoding ('UTF-8'); '-or- php.ini 'mbstring.internal_encoding =' UTF-8'' –

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