PHP에서 JSON 데이터로 작업할 때 정수 또는 유효하지 않은 속성으로 명명된 객체를 만날 수 있습니다. 변수 이름. 이로 인해 표준 점 표기법을 사용하여 이러한 속성에 액세스하는 데 어려움이 있을 수 있습니다.
json_decode()를 사용하여 JSON 개체가 디코딩되는 다음 예를 고려하세요.
$myVar = json_decode($data);
이렇게 하면 개체가 생성될 수 있습니다. like:
[highlighting] => stdClass Object ( [448364] => stdClass Object ( [Data] => Array ( [0] => Tax amount liability is ....... ) ) )
아래 표시된 것처럼 점 표기법을 사용하여 키 [0]의 문자열 값에 액세스하려고 하면 구문 오류가 발생합니다.
print $myVar->highlighting->448364->Data->0;
숫자 이름은 유효하지 않은 변수 이름으로 간주되므로 PHP는 숫자 이름을 가진 객체 속성에 직접 액세스할 수 없습니다. 이 문제는 PHP가 속성 접근자를 구문 분석하는 방식 때문에 발생합니다.
옵션 1: 수동 캐스팅
속성에 액세스하려면 다음을 수행하세요. (array)$object를 사용하여 객체를 배열로 수동으로 변환합니다. 이를 통해 배열 키로 숫자 속성에 액세스할 수 있습니다.
$highlighting = (array)$myVar->highlighting; $data = (array)$highlighting['448364']->Data; $value = $data['0'];
옵션 2: 중괄호 구문
대체 방법은 중괄호 구문을 사용하여 다음을 수행하는 것입니다. 속성에 액세스합니다. 그러나 이는 속성 이름이 완전히 숫자가 아닌 경우에만 작동합니다.
echo $myVar->highlighting->{'448364'}->Data->0; // OK! echo $myVar->highlighting->{'123'}->Data->0; // Error!
옵션 3: 재귀 캐스팅 기능
더 강력한 접근 방식은 사용자 정의를 생성하는 것입니다. 객체를 배열로 재귀적으로 변환하는 함수:
function recursive_cast_to_array($o) { $a = (array)$o; foreach ($a as &$value) { if (is_object($value)) { $value = recursive_cast_to_array($value); } } return $a; } $arr = recursive_cast_to_array($myVar); $value = $arr['highlighting']['448364']['Data']['0'];
옵션 4: 사용 JSON 함수
또 다른 옵션은 내장된 JSON 함수를 사용하여 객체를 배열로 재귀적으로 변환하는 것입니다.
$arr = json_decode(json_encode($myVar), true); $value = $arr['highlighting']['448364']['Data']['0'];
이 접근 방식은 편리하지만 데이터를 UTF-8로 인코딩되었습니다.
위 내용은 PHP에서 숫자 또는 잘못된 이름으로 개체 속성에 액세스하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!