Tôi có một số khóa mảng php có rất nhiều ký tự kỳ lạ.
Điều này có được phép không? Có bất kỳ ràng buộc nào đối với những gì tôi không thể sử dụng không?
Tôi có một số khóa mảng php có rất nhiều ký tự kỳ lạ.
Điều này có được phép không? Có bất kỳ ràng buộc nào đối với những gì tôi không thể sử dụng không?
Câu trả lời:
Theo sách hướng dẫn :
Khóa có thể là một số nguyên hoặc một chuỗi. Giá trị có thể thuộc bất kỳ loại nào.
Ngoài ra, các lần nhập khóa sau sẽ xảy ra:
- Các chuỗi chứa các số nguyên hợp lệ sẽ được chuyển sang kiểu số nguyên. Ví dụ: khóa "8" sẽ thực sự được lưu trữ dưới 8. Mặt khác, "08" sẽ không được ép kiểu, vì nó không phải là số nguyên thập phân hợp lệ.
- Số nổi cũng được chuyển thành số nguyên, có nghĩa là phần phân số sẽ bị cắt bớt. Ví dụ: khóa 8.7 sẽ thực sự được lưu trữ dưới 8.
- Bools cũng được chuyển thành số nguyên, tức là khóa true sẽ thực sự được lưu trữ dưới 1 và khóa false dưới 0.
- Null sẽ được chuyển sang chuỗi trống, tức là khóa null thực sự sẽ được lưu trữ trong "".
- Mảng và đối tượng không thể được sử dụng làm khóa. Làm như vậy sẽ dẫn đến cảnh báo: Loại bù đắp bất hợp pháp.
Hướng dẫn sử dụng lại :
Chuỗi là một chuỗi các ký tự, trong đó một ký tự giống như một byte. Điều này có nghĩa là PHP chỉ hỗ trợ bộ 256 ký tự và do đó không cung cấp hỗ trợ Unicode gốc. Xem chi tiết của loại chuỗi.
Vì vậy, trong ngắn hạn, bất kỳ chuỗi nào cũng có thể là một khóa. Và một chuỗi có thể chứa bất kỳ dữ liệu nhị phân nào (tối đa 2GB). Do đó, một khóa có thể là bất kỳ dữ liệu nhị phân nào (vì một chuỗi có thể là bất kỳ dữ liệu nhị phân nào).
Một số lạm dụng ngẫu nhiên (hợp lệ) của các khóa mảng:
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
Khóa phải là một chuỗi hoặc một số nguyên. Có một số diễn biến diễn ra, nhưng tôi nghĩ sách hướng dẫn đã giải thích rất tốt:
Khóa có thể là một số nguyên hoặc một chuỗi. Giá trị có thể thuộc bất kỳ loại nào.
Ngoài ra, các lần nhập khóa sau sẽ xảy ra:
- Các chuỗi chứa các số nguyên hợp lệ sẽ được chuyển sang kiểu số nguyên. Ví dụ: khóa "8" sẽ thực sự được lưu trữ dưới 8. Mặt khác, "08" sẽ không được ép kiểu, vì nó không phải là số nguyên thập phân hợp lệ.
- Số nổi cũng được chuyển thành số nguyên, có nghĩa là phần phân số sẽ bị cắt bớt. Ví dụ: khóa 8.7 sẽ thực sự được lưu trữ dưới 8.
- Bools cũng được chuyển thành số nguyên, tức là khóa true sẽ thực sự được lưu trữ dưới 1 và khóa false dưới 0.
- Null sẽ được chuyển sang chuỗi trống, tức là khóa null thực sự sẽ được lưu trữ trong "".
- Mảng và đối tượng không thể được sử dụng làm khóa. Làm như vậy sẽ dẫn đến cảnh báo: Loại bù đắp bất hợp pháp.
Tôi tìm thấy câu trả lời này để tìm kiếm thêm thông tin về một vấn đề tôi gặp phải. Tôi đang sử dụng các chuỗi có ký tự UTF-8 trong đó, các chuỗi này sẽ không hoạt động như các khóa cho một mảng mà tôi có.
Cái gì đó như
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
Giải pháp (không lớn hay thông minh) đối với tôi là làm điều này ..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
Các khóa mảng trong PHP có thể là số nguyên hoặc chuỗi. Chuỗi PHP là mảng byte, có nghĩa là chuỗi các byte. Không có loại chuỗi nào khác và PHP không áp đặt bất kỳ hạn chế đặc biệt nào đối với chuỗi khóa mảng. Nói cách khác: miễn là nó là một chuỗi, bất cứ điều gì sẽ xảy ra.
Nếu các khóa phức tạp đang gây ra lỗi "chỉ mục không xác định", bạn có thể gặp sự cố "cắt".
Tôi đã phát điên lên vì một khóa phức tạp tạo ra lỗi "chỉ mục không xác định" và tôi nghĩ có thể đó là vi phạm cú pháp. Khóa mảng gây ra lỗi được tạo từ một trường từ truy vấn cơ sở dữ liệu MySQL mà tôi đang chuyển đổi thành khóa và sử dụng trong một mảng mới. Chìa khóa trông như thế này: pl_1DNKoiJKwotCqAycickBVhTy
và đây là cách mã được xây dựng.
//new array created from database query
$new_array[$dbquery['fieldname']] = {some value};
//key value found in field of second array
$keyval = $array_two['fieldname'];
//this produced the "undefined index" error
echo $new_array[$keyval];
trên thực tế, khi nào $keyval
và có $dbquery['fieldname']
vẻ là một kết hợp hoàn hảo (được xác minh trực quan bằng cách gửi lại cả hai vào trình duyệt). Bí ẩn đã được giải quyết bằng cách sử dụng đơn giản trim
trong câu lệnh thứ hai như thế này: $keyval = trim($array_two['fieldname']);
Sau khi 'cắt', php không còn phàn nàn nữa.
Hy vọng điều này sẽ cứu một số người khác khỏi một số khoảnh khắc bực bội ...
Cá nhân tôi không gặp bất kỳ vấn đề nào với các ký tự bất thường trong các khóa mảng. Điều gì là hợp pháp và không hợp pháp không được ghi chép đầy đủ, ngoài việc nói rằng khóa phải là một đại lượng vô hướng. Đặt cược tốt nhất của bạn là chỉ thử nó và xem.
Trong mảng php, bạn không thể sử dụng khóa: 2,3 hoặc số thập phân
Mã hóa trang php trong ANSI "é" sẽ có thể sử dụng (Cinéma sẽ không hiển thị dưới dạng Cinà © ma). Trong Notepad ++ chỉ cần sử dụng menu Mã hóa => Chuyển đổi ANSI và lưu
é
không có mặt, điều gì sẽ xảy ra nếu OP không sử dụng Notepad ++?
$a = (object) ['@km³' => 123]; error_log($a->@km³);