ORMから引き出されたオブジェクトの配列のjson_encode()を返しています。これには、ヌル値を持つ多くのプロパティが含まれます。ヌルであるこれらのプロパティを削除する最もきれいな方法は何ですか?私はプロパティを反復することができたと思います。それらがnullであるかどうかを調べ、そのプロパティを解除します(しかし、確かによりエレガントな方法が必要です)。nullのオブジェクトのプロパティを削除するPHP関数はありますか?
答えて
これを試してください。それは単純なオブジェクト上でしか動作しませんが、ORMから来ているならば、それは十分単純でなければなりません。
// Strips any false-y values
$object = (object) array_filter((array) $object);
おかげで私のアイデアを与えるため、昨日別の質問への答えGordon'sへ。
これは、オブジェクトのプロパティキーである連想配列、にオブジェクトを変換
- によって動作し、それらの値は、アレイが(偽の配列エントリを削除するために、デフォルト引数でarray_filterを用い
- 値であります例えば、空、またはnull)は、単純なオブジェクトに戻って、これはすべての小道具を削除することを
注意を新しい配列に変換
// Setup
$obj = (object) array('foo' => NULL, 'bar' => 'baz');
// equivalent to array_filter
array_walk($obj, function($v,$k) use ($obj) {
if(empty($v)) unset($obj->$k);
});
// output
print_r($obj);
出力
stdClass Object
(
[foo] => bar
)
null値のプロパティを削除する標準機能はありません。あなたがエレガントに書いていれば、あなた自身のものを書くことは、エレガントではありません。
1次元のオブジェクトまたは配列を持つ場合にのみ機能します。入れ子になっている配列やオブジェクトがある場合は、受け入れられた解を動作させるために、何らかの再帰的な配列フィルタを作成する必要があります。良くない。
私の同僚と私が思いついた最善の解決策は、実際にサーバーから返される前にJSON文字列で正規表現を実行することでした。
$json = json_encode($complexObject);
echo preg_replace('/,\s*"[^"]+":null|"[^"]+":null,?/', '', $json);
正規表現は、先頭のコンマとキーの開始との間に空白を含む形式,"key":null
の文字列内のすべての場所を削除します。また、 "key":nullと一致して、JSONオブジェクトの先頭にヌル値が見つからないことを確認します。
これは明らかに最も理想的な状況ではありませんが、何らかの種類の再帰的配列フィルタを開発することなくヌルエントリを効果的に削除します。
私はその意志ので、エル・ヨボによって与えられた応答に追加するつもりです:あなたも閉鎖してarray_walk
を使用することができます名前にもかかわらず
// Strips only null values
$object = (object) array_filter((array) $object, function ($val) {
return !is_null($val);
});
@Gordonの回答を除いて、その作業を行うには2つの調整が必要ですが、代わりにarray_walk_recursiveを使用することもできます。参照が必要です。そうしないと、オブジェクトに加えた変更は、クロージャー外のスコープには適用されません。
IE:
$someObject = (array)$someObject;
array_walk_recursive($someObject, function($v,$k) use (&$someObject) {
if($someObject[$k] == null) {
unset($someObject[$k]);
}
});
$someObject = (object)$someObject;
var_dump($someObject);
- 1. PHPの関数エイリアスを削除する
- 2. オブジェクトからプロパティを削除する真の方法(delete vs null vs undefined)
- 3. 配列に空のセルを削除するPHPの関数はありますか?
- 4. オブジェクト[HTMLFormElement]のプロパティ 'submit'は関数ではありません
- 5. メンバー関数からのオブジェクトの削除
- 6. rails:JSONレスポンスでオブジェクトの配列から特定のプロパティを削除する方法はありますか?
- 7. エラー(オブジェクトのプロパティ「警告」の関数ではありません)
- 8. javascriptオブジェクトからオブジェクト名を "削除"する方法はありますか?
- 9. ポインタを削除しますがNULLではありません
- 10. 純粋な仮想関数を「削除」する方法はありますか?
- 11. phpのURLからフォルダ名を削除する方法はありますか?
- 12. 未定義のプロパティをオブジェクトから削除する方法は?
- 13. 行数が追加されたオブジェクトのプロパティを削除する
- 14. オブジェクトからプロパティを削除し、それをコンストラクタのプロパティに割り当てることはできますか?
- 15. 関数内から.GlobalEnv内のオブジェクトを削除する
- 16. データレイヤー内のオブジェクトを削除する方法はありますか?
- 17. null関数の引数arduinoを宣言する必要はありますか? PHPで
- 18. オブジェクトのリスト内の複数のオブジェクトをプロパティで削除する方法
- 19. Sesam DTLのnullプロパティを削除します
- 20. リストからオブジェクトのプロパティを削除しますが、インデックス全体ではありません
- 21. Uncaught TypeError:オブジェクト[オブジェクトDOMWindow]のプロパティが関数ではありません
- 22. Uncaught TypeError:オブジェクト[オブジェクトDOMWindow]のプロパティ '$'が関数ではありません
- 23. Ionic 2:Android:TypeError:オブジェクト[オブジェクト配列]の 'jscomp_symbol_iterator0'プロパティが関数ではありません
- 24. 角2 - IE11関数 'webpackJsonp'の値がnullまたは未定義です。関数オブジェクトではありません
- 25. djangoでは、特定のタイプのインスタンスを削除する際に、関連オブジェクトをすべて削除する方法はありますか?
- 26. 関数オブジェクトにプロパティまたは関数を追加する際に問題があります
- 27. lodashを使ってオブジェクトからプロパティを削除するには?
- 28. ポインタの削除に関する質問。どのクラスを削除する必要がありますか?
- 29. ""動作を模倣するPHP関数はありますか?
- 30. これを修正するPHP関数はありますか?
すごいです!これは完全に機能しました。どうもありがとうございます。私はそれがどうやっているのかは分かりませんが、それはとても素敵なトリックです。 – Darren
私はそれにも説明を追加します:) –
2つの注意点とともに説明を追加しました。 ''と0のような値を持つプロパティも失われます.Array_filter引数は、それら。 –