ホームページ >バックエンド開発 >PHPチュートリアル >特定のプロパティ値を比較してオブジェクト配列間の違いを判断するにはどうすればよいですか?
質問:
array_diff などのレガシー関数および array_udiff は、スカラー値の配列を比較するために設計されています。特定のプロパティ値に基づいて比較したい場合、オブジェクトの 2 つの配列の違いをどのように判断すればよいでしょうか?
解決策:
幸いなことに、array_udiff を活用できます。この要件に対処するために。目的のプロパティに焦点を当てたカスタム比較関数を定義し、array_udiff を利用して 2 つの配列間の違いを判断します。
次の配列の例を考えてみましょう。
<code class="php">$array1 = array( (object) ['id' => '205', 'day_id' => '12'], ... ); $array2 = array( (object) ['id' => '205', 'day_id' => '13'], ... );</code>
私たちの目標は次のとおりです。 id プロパティに基づいてこれらの配列間の違いを識別します。これを実現するには、比較関数を作成します。
<code class="php">function compare_objects($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; }</code>
この関数は、2 つのオブジェクトの id プロパティを比較し、その差を整数として返します。次に、array_udiff を次のように利用します。
<code class="php">$diff = array_udiff($array1, $array2, 'compare_objects');</code>
あるいは、PHP 5.3 以降では、比較に匿名関数を使用できます。
<code class="php">$diff = array_udiff($array1, $array2, function ($obj_a, $obj_b) { return $obj_a->id - $obj_b->id; } );</code>
このソリューションは、2 つの間の差を効果的に計算します。指定されたプロパティ値を比較してオブジェクトの配列を取得します。結果の $diff 配列には、比較基準に基づいて $array1 または $array2 のいずれかの一意の要素を表すオブジェクトが含まれます。
以上が特定のプロパティ値を比較してオブジェクト配列間の違いを判断するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。