我正在用PHP讀取JSON數據,該數據包含空對象(如{}
)。所以問題是,我必須以不同的方式處理對象爲空的情況,但是我找不到足夠的方法來執行檢查。 empty(get_object_vars(object))
看起來太可怕了,效率很低。有沒有好的方法來做檢查?如何檢查PHP中的JSON對象是否爲空?
19
A
回答
22
有多少東西你是否正在反序列化?除非empty(get_object_vars($object))
或陣列被證明是一個主要的放緩/瓶頸,我不會擔心它 - Greg的解決方案很好。
我建議JSON數據進行解碼時使用的$associative
標誌,但:
json_decode($data, true)
這解碼JSON對象作爲普通舊PHP數組而不是作爲stdClass
對象。然後,您可以使用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()
是:
get_object_vars($obj) ? TRUE : FALSE;
在PHP docs我們可以讀取注:
在使用上不可訪問的對象屬性
empty()
,該__isset()
重載方法將被調用,如果宣佈。
這意味着當在具有__get()
方法的對象上使用empty()
時,它總是返回True。
相關問題
- 1. 檢查Json對象是否爲空
- 2. 檢查PL/JSON中的JSON對象是否爲空或空
- 3. 如何檢查Java中的JSON對象是否爲空?
- 4. 如何檢查對象是否爲空
- 5. 如何檢查對象是否爲空?
- 6. 如何檢查對象是否爲空
- 7. 如何檢查對象是否爲「空」?
- 8. 如何檢查句柄中的對象是否爲空?
- 9. 如何在ColdFusion中檢查對象的值是否爲空
- 10. 如何檢查Java中的對象是否爲空?
- 11. 如何檢查jQuery中的HTML對象是否爲空?
- 12. 檢查對象是否爲空或NULL
- 13. 檢查HDF5 Store對象是否爲空?
- 14. 檢查對象是否爲空
- 15. C#.NET檢查對象是否爲空
- 16. javascript - 檢查對象是否爲空
- 17. 檢查對象是否爲空?
- 18. 檢查對象內是否爲空
- 19. 檢查一個對象是否爲空
- 20. php oop檢查對象是否爲空/空
- 21. 如何檢查對象是否爲空或填充空支撐
- 22. 如何檢查對象數組是否爲空/空?
- 23. 如何檢查對象是否爲空,如果它的0
- 24. 如何檢查對象在EF中是否爲空
- 25. 如何查看對象是否爲空?
- 26. 快捷方式檢查JSON對象是否爲空
- 27. 空的JSON對象檢查
- 28. 如何檢查對象是否爲UIButton
- 29. 如何檢查指針指向的對象是否爲空?
- 30. 檢查對象中是否有空值
相關:https://stackoverflow.com/q/9412126/3995261 – YakovL 2018-01-03 16:31:53