PHP 배열 키에 허용되는 문자?
이상한 문자가 많은 PHP 배열 키가 있습니다.
이것이 허용됩니까? 사용할 수없는 것에 제약이 있습니까?
설명서 에 따르면 :
키는 정수 또는 문자열 일 수 있습니다. 값은 모든 유형이 될 수 있습니다.
또한 다음과 같은 키 캐스트가 발생합니다.
- 유효한 정수를 포함하는 문자열은 정수 유형으로 캐스트됩니다. 예를 들어 키 "8"은 실제로 8 아래에 저장됩니다. 반면에 "08"은 유효한 십진 정수가 아니기 때문에 캐스트되지 않습니다.
- 부동 소수점도 정수로 캐스트되므로 분수 부분이 잘립니다. 예를 들어 키 8.7은 실제로 8 아래에 저장됩니다.
- 부울도 정수로 캐스트됩니다. 즉, true 키는 실제로 1 아래에 저장되고 false 키는 0 아래에 저장됩니다.
- Null은 빈 문자열로 캐스트됩니다. 즉, null 키는 실제로 ""아래에 저장됩니다.
- 배열과 객체는 키로 사용할 수 없습니다. 이렇게하면 경고가 발생합니다. 잘못된 오프셋 유형입니다.
다시 매뉴얼 :
문자열은 일련의 문자이며 문자는 바이트와 동일합니다. 즉, PHP는 256 자 세트 만 지원하므로 기본 유니 코드 지원을 제공하지 않습니다. 문자열 유형에 대한 세부 사항을 참조하십시오.
즉, 모든 문자열이 키가 될 수 있습니다. 그리고 문자열에는 모든 이진 데이터 (최대 2GB)가 포함될 수 있습니다. 따라서 키는 모든 이진 데이터가 될 수 있습니다 (문자열은 이진 데이터 일 수 있으므로).
배열 키의 무작위 (유효한) 남용 :
$w = array(chr(0) => 'null byte?', chr(rand(0, 255)) => 'random byte?');
var_dump($w);
키는 문자열 또는 정수 여야합니다. 발생하는 몇 가지 캐스트가 있지만 매뉴얼이 설명하는 데 효과적이라고 생각합니다.
키는 정수 또는 문자열 일 수 있습니다. 값은 모든 유형이 될 수 있습니다.
또한 다음과 같은 키 캐스트가 발생합니다.
- 유효한 정수를 포함하는 문자열은 정수 유형으로 캐스트됩니다. 예를 들어 키 "8"은 실제로 8 아래에 저장됩니다. 반면에 "08"은 유효한 십진 정수가 아니기 때문에 캐스트되지 않습니다.
- 부동 소수점도 정수로 캐스트되므로 분수 부분이 잘립니다. 예를 들어 키 8.7은 실제로 8 아래에 저장됩니다.
- 부울도 정수로 캐스트됩니다. 즉, true 키는 실제로 1 아래에 저장되고 false 키는 0 아래에 저장됩니다.
- Null은 빈 문자열로 캐스트됩니다. 즉, null 키는 실제로 ""아래에 저장됩니다.
- 배열과 객체는 키로 사용할 수 없습니다. 이렇게하면 경고가 발생합니다. 잘못된 오프셋 유형입니다.
내가 가진 문제에 대한 자세한 정보를 찾고있는이 답변을 찾았습니다. 내가 가진 배열의 키로 작동하지 않는 UTF-8 문자가있는 문자열을 사용하고있었습니다.
같은 것
$str = "R&D - Solution";
$arr = array( "R&D - Solution" => "Research" );
echo $arr[$str]; // did not work
저에게 (크거나 영리하지 않은) 해결책은 이것을하는 것이 었습니다 ..
$str = md5("R&D - Solution");
$arr = array( md5("R&D - Solution") => "Research" );
echo $arr[$str]; // works!
PHP 문자열에 넣을 수있는 것은 무엇이든 배열 키로 사용할 수 있습니다. 허용되는 문자에는 제한이 없습니다.
$a = array();
$x = 'long string of random garage';
echo $a[$x]; // this is ok
$x = array();
echo $a[$x]; // not ok
PHP 배열 키는 정수 또는 문자열 일 수 있습니다. PHP 문자열은 바이트 배열로, 바이트 시퀀스를 의미합니다. 다른 유형의 문자열은 없으며 PHP는 배열 키 문자열에 특별한 제한을 부과하지 않습니다. 즉, 문자열이면 무엇이든 진행됩니다.
개인적으로 배열 키의 특이한 문자에 문제가 없었습니다. 무엇이 합법적이며 합법적이지 않은지는 잘 문서화되어 있지 않습니다. 키가 스칼라 여야한다는 것 외에는 말입니다. 가장 좋은 방법은 시도하고 보는 것입니다.
모든 답이 사실 인 것 외에도 : PSR 을 사용 하여 멋진 표준 코딩 스타일을 갖기 위해 최고의 프로그래머 사이에 일종의 규칙이 될 수 있습니다 .
복잡한 키로 인해 "정의되지 않은 인덱스"오류가 발생하는 경우 단순히 "트림"문제가있을 수 있습니다.
복잡한 키가 "정의되지 않은 인덱스"오류를 뱉어 내고 구문 위반 일 수 있다고 생각했기 때문에 저는 미쳤습니다. 오류를 일으키는 배열 키는 내가 키로 변환하고 새 배열에서 사용하는 MySQL 데이터베이스 쿼리의 필드에서 빌드되었습니다. 키는 다음과 같습니다. pl_1DNKoiJKwotCqAycickBVhTy
여기에 코드가 생성 된 방법이 있습니다.
//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];
when, in fact, the $keyval
and $dbquery['fieldname']
appeared to be a perfect match (visually verified by echoing both to the browser). The mystery was solved by simply using trim
in the second statement like this: $keyval = trim($array_two['fieldname']);
Once 'trimmed', php no longer complained.
Hoping this saves some others from some frustrating moments...
Encode the php page in ANSI "é" will be able for use (Cinéma wont show up as Cinéma). In Notepad++ just use the menu Encode=>Convert ANSI and save
참고URL : https://stackoverflow.com/questions/10696067/characters-allowed-in-php-array-keys
'developer tip' 카테고리의 다른 글
Python은 멀티 스레딩을 지원합니까? (0) | 2020.10.08 |
---|---|
$ document.ready ()에 해당하는 Angular2 (0) | 2020.10.08 |
스위치 케이스 순서가 속도에 영향을 줍니까? (0) | 2020.10.08 |
shared_ptr 매직 :) (0) | 2020.10.08 |
System.Web.Helpers, System.Web.WebPages 및 System.Web.Razor는 어디에서 찾을 수 있습니까? (0) | 2020.10.08 |