PHP로 JSON 데이터를 읽고 그 데이터에 빈 오브젝트 (예 : {}
)가 있습니다. 그래서 문제는 객체가 다른 방식으로 비어있는 경우를 처리해야하지만 검사를 수행 할 수있는 충분한 방법을 찾을 수 없다는 것입니다. empty(get_object_vars(object))
은 너무 무섭고 매우 비효율적으로 보입니다. 수표를 발행 할 좋은 방법이 있습니까?PHP에서 JSON 객체가 비어 있는지 확인하는 방법은 무엇입니까?
19
A
답변
22
얼마나 많은 객체 empty(get_object_vars($object))
또는 배열로 캐스팅하지 않으면 주요 속도가 느려지거나 병목 현상이 발생하지 않는다면 걱정할 필요가 없습니다. 그렉의 솔루션은 괜찮습니다.
나는 JSON 데이터를 디코딩 할 때, 그래도하여 $associative
플래그를 사용하는 것이 좋습니다 것 :
json_decode($data, true)
이 일반 오래된 PHP 배열로 대신 stdClass
개체로 JSON 객체를 디코딩. 그런 다음 empty()
을 사용하여 빈 오브젝트를 확인하고 stdClass
을 사용하는 대신 사용자 정의 클래스의 오브젝트를 작성할 수 있습니다. 이는 장기적으로는 좋은 아이디어입니다.
24
당신은 배열 (불행하게도 당신이 empty()
에 대한 호출 내에서이 작업을 수행 할 수 없습니다에 캐스팅 수 :
$x = (array)$obj;
if (empty($x))
...
또는 배열과 count()
캐스트 :
if (count((array)$obj))
...
0
개체가 비어 있는지 여부를 알려야했지만 개인 및 보호 된 속성을 무시해야하므로이 작업을 수행 할 수있는 작은 기능을 만들었습니다.
function empty_obj(&$object, $ignore_private = true, $ignore_protected = true) {
$obj_name = get_class($object);
$obj = (array)$object;
foreach(array_keys($obj) as $prop) {
$is_private = $is_protected = false;
$prop = preg_replace("/[^\w*]/", '', $prop);
$prop_name = str_replace(array($obj_name, '*'), '', $prop);
if(preg_match("~^$obj_name$prop_name$~", $prop))
$is_private = true;
if(preg_match("~^\*$prop_name$~", $prop))
$is_protected = true;
if(!$is_private || !$is_protected || ($is_private && !$ignore_private) || ($is_protected && !$ignore_protected))
return;
}
return true;
}
0
이것이 배열에 캐스트하는 것보다 효과적인지 또는 덜 효과적인지는 모르겠지만 더 많이 추측합니다. 객체를 반복 할 수 있고 무언가를 찾자 마자 대답이 나오고 반복을 멈출 수 있습니다.
function is_obj_empty($obj){
if(is_null($obj)){
return true;
}
foreach($obj as $key => $val){
return false;
}
return true;
}
3
시도 empty()
를 사용하지 않고 인 : PHP docs에
get_object_vars($obj) ? TRUE : FALSE;
우리는 메모를 읽을 수 있습니다
액세스 개체 속성에
empty()
을 사용하여__isset()
오버로드 메서드가 호출됩니다 , 선언 된 경우.
empty()
을 사용하면 __get()
메서드를 사용하는 객체에서 항상 True를 반환합니다.
관련 문제
- 1. matlab에서 행렬이 비어 있는지 확인하는 방법은 무엇입니까?
- 2. corba :: WString이 비어 있는지 확인하는 방법은 무엇입니까?
- 3. 파이썬에서 양지들이 비어 있는지 확인하는 방법은 무엇입니까?
- 4. NSString이 비어 있는지 확인하는 방법
- 5. 반환 된 데이터 객체가 비어 있는지 확인하는 jQuery
- 6. plist가 비어 있는지 확인하는 방법
- 7. ImageField가 비어 있는지 확인하는 방법
- 8. UITableViewCells가 비어 있는지 확인하는 방법
- 9. 폴더가 비어 있는지 확인하는 방법
- 10. Flex에서 XMLList가 비어 있는지 확인하는 방법
- 11. 동적 요소가 비어 있는지 확인하는 방법.
- 12. Emacs Lisp에서 문자열이 비어 있는지 확인하는 방법?
- 13. NSFetchedResultsController가 비어 있는지 확인하십시오.
- 14. 테이블의 열이 비어 있는지 여부를 확인하는 더 좋은 방법은 무엇입니까?
- 15. 모든 양식 값이 비어 있는지 확인하는 가장 쉬운 방법은 무엇입니까?
- 16. VC++에서 디렉토리가 비어 있는지 확인하는 방법은 무엇입니까?
- 17. Python : 중첩 목록이 본질적으로 비어 있는지 확인하는 방법은 무엇입니까?
- 18. Delphi 및 Outlook TaskItem : DueDate가 비어 있는지 확인하는 방법은 무엇입니까?
- 19. AS3 "Object"변수가 완전히 비어 있는지 확인하는 방법은 무엇입니까?
- 20. 참조 된 테이블이 비어 있는지 확인하는 방법은 무엇입니까?
- 21. 텍스트 영역의 특정 행이 비어 있는지 확인하는 방법은 무엇입니까?
- 22. 배열에 객체가 포함되어 있는지 확인하는 더 나은 방법은 무엇입니까?
- 23. NSArray에 특정 클래스의 객체가 포함되어 있는지 확인하는 방법은 무엇입니까?
- 24. 페이지에 얼마나 많은 jQuery 객체가 있는지 확인하는 방법은 무엇입니까?
- 25. RichTextBox가 비어 있는지 감지
- 26. php : 배열의 특정 항목이 비어 있는지 확인하십시오.
- 27. PHP에서 배열 내에 문자열이 있는지 확인하는 방법은 무엇입니까?
- 28. 레코드 집합 행이 비어 있는지 확인하는 방법?
- 29. 날짜 위젯이 비어 있는지 확인하는 방법?
- 30. ASP.NET [SqlDataSource1이 비어 있는지 확인하는 방법]
관련 : https://stackoverflow.com/q/9412126/3995261 – YakovL