PHPでJSONデータを読み込んでいて、そのデータに空のオブジェクト({}
など)が含まれています。だから問題は、私はオブジェクトが異なる方法で空であるケースを処理する必要がありますが、私はチェックを行うための十分な方法を見つけることができません。 empty(get_object_vars(object))
はあまりにも恐ろしくて非常に非効率的です。小切手をする良い方法はありますか?JSONオブジェクトがPHPで空であるかどうかをチェックする方法は?
答えて
どのように多くのオブジェクトempty(get_object_vars($object))
または配列へのキャストが大きな減速/ボトルネックとならない限り、私はそれについて心配しません.Gregの解決策はまあまあです。
でも、私は、JSONデータを復号化する際$associative
フラグを使用することをお勧めしたい:
json_decode($data, true)
これは、昔ながらのPHP配列としての代わりに、stdClass
オブジェクトとしてJSONオブジェクトをデコードします。次に、empty()
を使用して空のオブジェクトを確認し、stdClass
の代わりにユーザー定義のクラスのオブジェクトを作成することができます。これはおそらく長期的には良い考えです。
あなたは(残念ながらあなたがempty()
への呼び出し中にこれを行うことはできません配列にキャストできます。
$x = (array)$obj;
if (empty($x))
...
または配列とcount()
にキャスト:
if (count((array)$obj))
...
オブジェクトが空であるかどうかを知る必要がありましたが、プライベートプロパティと保護されたプロパティも無視する必要があったため、これを行うための小さな機能を作成しました。
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;
}
私は、これは、配列にキャストするよりも、多かれ少なかれ効果的ですが、私はより多くを推測するかどうかわかりません。オブジェクトをループするだけで、何かを見つけたらすぐに答えを出し、ループを止めることができます。
function is_obj_empty($obj){
if(is_null($obj)){
return true;
}
foreach($obj as $key => $val){
return false;
}
return true;
}
あるempty()
を使用せずに試してみてください。PHP docsオン
get_object_vars($obj) ? TRUE : FALSE;
我々はノートを読むことができます:
アクセスできないオブジェクトのプロパティに
empty()
を使用する場合は、__isset()
オーバーロードメソッドが呼び出されます、宣言されている場合。__get()
方法を持っているオブジェクト上empty()
を使用した場合、それは常にtrueを返します意味
。
- 1. JSONオブジェクトがJavaで空であるかどうかをチェックする方法は?
- 2. json配列がc#で空であるかどうかをチェックする方法?
- 3. スパン内のオブジェクトが空であるかどうかをチェックする方法は?
- 4. オブジェクトが「深い空」であるかどうかをチェックする方法は?
- 5. UITextFieldsが空であるかどうかをチェックする方法?
- 6. リストビューが空であるかどうかチェックする方法
- 7. オブジェクトが空の状態にあるかどうかをチェックする方法は?
- 8. Qtでは、stdinが空であるかどうかをチェックする方法は?
- 9. 空であるかどうかチェックボックスをチェックする方法
- 10. PythonでGtk.ListStoreが空であるかどうかをチェックする方法は?
- 11. Pythonで変数が空であるかどうかをチェックする方法は?
- 12. Elasticsearchでインデックスが空であるかどうかをチェックする方法は?
- 13. PHP Slimリクエストがapplication/jsonかどうかをチェックする方法
- 14. POSTフォームのデータが空であるかどうかをチェックする方法は?
- 15. ファイルがPHPでbashファイルであるかどうかをチェックする方法は?
- 16. 2d配列で行が空であるかどうかをチェックする方法。
- 17. VBAで配列が空であるかどうかをチェックする方法?
- 18. codeigniterでファイルフィールドが空であるかどうかをチェックする方法?
- 19. perlでハッシュが空であるかどうかをチェックする方法
- 20. C#でExcel範囲が空であるかどうかをチェックする方法
- 21. NHibernate(HQL)でコレクションが空であるかどうかをチェックする方法?
- 22. perlでハッシュリファレンスが空であるかどうかをチェックする方法
- 23. ファイルがBashで空であるかどうかをチェックする方法?
- 24. オブジェクトがオブジェクトの配列であるかどうかをチェックする方法
- 25. データベースからのフィールドが空であるかどうかをチェックする方法?
- 26. vars(オブジェクト)が辞書型であるかどうかをチェックする方法は?
- 27. オブジェクトがVueコンポーネントであるかどうかをチェックする方法は?
- 28. オブジェクトがJavascriptの「サブオブジェクト」であるかどうかをチェックする方法は?
- 29. DjangoオブジェクトがjavascriptでNoneであるかどうかをチェックする方法?
- 30. iOSの場合、URLが空であるかどうかをチェックする方法
関連:https://stackoverflow.com/q/9412126/3995261 – YakovL