Tôi đang đọc dữ liệu JSON bằng PHP và dữ liệu đó chứa các đối tượng trống (như {}
). Vì vậy, vấn đề là, tôi phải xử lý các trường hợp khi đối tượng là trống theo cách khác nhau nhưng tôi không thể tìm thấy cách đủ tốt để làm kiểm tra. empty(get_object_vars(object))
trông quá đáng sợ và rất kém hiệu quả. Có cách nào tốt để thực hiện kiểm tra không?Cách kiểm tra xem đối tượng JSON có trống trong PHP không?
Trả lời
Có bao nhiêu đối tượng Trừ khi empty(get_object_vars($object))
hoặc truyền đến mảng chứng tỏ là một sự chậm lại lớn/nút cổ chai, tôi sẽ không lo lắng về nó - giải pháp của Greg là tốt.
tôi muốn đề nghị sử dụng các $associative
cờ khi giải mã dữ liệu JSON, mặc dù:
json_decode($data, true)
này giải mã đối tượng JSON như đồng bằng mảng PHP cũ thay vì như stdClass
đối tượng. Sau đó, bạn có thể kiểm tra các đối tượng trống bằng cách sử dụng empty()
và tạo đối tượng của lớp do người dùng xác định thay vì sử dụng stdClass
, đây có thể là một ý tưởng hay về lâu dài.
Bạn có thể bỏ nó vào một mảng (tiếc là bạn không thể làm điều này trong một cuộc gọi đến empty()
:
$x = (array)$obj;
if (empty($x))
...
Hoặc đúc để một mảng và count()
:
if (count((array)$obj))
...
Nó không giống với get_object_vars? I E. không thực sự hiệu quả? :) – vava
Tôi chưa thử nghiệm nó nhưng trừ khi bạn đang gặp vấn đề về hiệu suất và đã xác định điều này là nút cổ chai, tôi không nghĩ rằng đáng để bạn lo lắng về nó. – Greg
Nó không phải dễ dàng để ngừng lo lắng về biến đổi mảng không cần thiết nếu bạn là một lập trình viên C++ hầu hết cuộc sống của bạn :) Nó có nghĩa là phân bổ bộ nhớ và sao chép nội dung cho một cái gì đó mà chỉ cần kiểm tra nhanh nếu một bit được thiết lập. – vava
Tôi phải nói một đối tượng trống hay không, nhưng tôi cũng phải bỏ qua các thuộc tính riêng tư và được bảo vệ, vì vậy tôi đã thực hiện chức năng nhỏ này mà bạn có thể thực hiện việc này.
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;
}
Tôi không chắc liệu điều này có hiệu quả nhiều hay ít hơn khi truyền sang mảng nhưng tôi đoán nhiều hơn. Bạn chỉ có thể bắt đầu lặp lại đối tượng và ngay sau khi bạn tìm thấy một cái gì đó bạn có một câu trả lời và dừng vòng lặp.
function is_obj_empty($obj){
if(is_null($obj)){
return true;
}
foreach($obj as $key => $val){
return false;
}
return true;
}
Cố gắng mà không sử dụng empty()
đó là:
get_object_vars($obj) ? TRUE : FALSE;
On PHP docs chúng ta có thể đọc lưu ý:
Khi sử dụng
empty()
trên thuộc tính đối tượng không thể tiếp cận, các__isset()
phương pháp quá tải sẽ được gọi là , nếu được khai báo.
Có nghĩa là khi sử dụng empty()
trên một đối tượng có phương pháp __get()
, nó sẽ luôn trả về True.
- 1. Kiểm tra đối tượng mảng trống trong JSON với jQuery
- 2. Cách kiểm tra xem đối tượng đã cho là đối tượng hoặc Mảng trong chuỗi JSON
- 3. Làm cách nào để kiểm tra xem JSON có trống trong NodeJS không?
- 4. kiểm tra xem NSNumber có trống không
- 5. Cách kiểm tra xem biến có trống không trong python?
- 6. Cách kiểm tra xem đối tượng JSON có rỗng trong Java không?
- 7. PHP & MySql kiểm tra xem bảng có trống không
- 8. Với iOS, cách kiểm tra xem URL có trống không
- 9. Java: Cách kiểm tra xem đối tượng có rỗng không?
- 10. Cách kiểm tra xem động có trống không.
- 11. Kiểm tra xem NumericUpDown có trống không
- 12. kiểm tra xem biến có trống không
- 13. Để kiểm tra xem một đối tượng có trống không hoặc không
- 14. Kiểm tra xem BSTR có trống không
- 15. Kiểm tra xem chuỗi có trống không
- 16. Kiểm tra xem một mảng có trống không trong Jinja2
- 17. Làm cách nào để kiểm tra xem mục nhập mysql có trống trong PhP không?
- 18. Django kiểm tra xem trường có trống không?
- 19. Cách kiểm tra xem tệp có trống không?
- 20. Cách kiểm tra xem một mảng có trống không?
- 21. Cách kiểm tra xem UITextField có trống không?
- 22. cách kiểm tra xem trường tệp có trống không?
- 23. Magento Cách kiểm tra xem giỏ hàng có trống không?
- 24. MVC3 Razor: cách kiểm tra xem model có trống không
- 25. kiểm tra cho đối tượng JSON null trong Java/Android
- 26. Kiểm tra xem hộp thư có trống không? trong erlang
- 27. PHP kiểm tra xem đối tượng có thể được chuyển đổi thành số nguyên không?
- 28. SQLAlchemy: Kiểm tra xem đối tượng đã có trong bảng
- 29. Kiểm tra xem thuộc tính CoreData có trống không
- 30. kiểm tra xem đối tượng có tồn tại trong Tập tin đám mây (API PHP)
liên quan: https://stackoverflow.com/q/9412126/3995261 – YakovL