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.
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.
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 []
.
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ăngsubstr()
và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.
Niềng răng '{}' là di sản từ băm Perl, và đang bị bỏ rơi. – Kekoa
Hãy cẩn thận, $str[n]
và $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)
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'' –
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) –
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). –