現在の位置: ホーム> 最新記事一覧> array_diff_assoc関数実用的なチュートリアル:ユーザー形式で修正されたフィールドを検出する方法は?

array_diff_assoc関数実用的なチュートリアル:ユーザー形式で修正されたフィールドを検出する方法は?

gitbox 2025-07-26

Web開発では、ユーザーがフォームを送信する場合、特にユーザー情報を変更するシナリオで、提出されたデータを元のデータと比較する必要があることがよくあります。たとえば、ユーザーは自分の個人情報を変更しており、どのフィールドが変更されたかを検出したいと考えています。 PHPによって提供されるarray_diff_assoc()関数は、このタスクを簡単に完了するのに役立ちます。今日、この関数を使用して、実用的なケースを通じて形式で修正されたフィールドを検出する方法を学びます。

1. array_diff_assoc()関数は何ですか?

array_diff_assoc()関数は、キー名とキー値の比較に基づいて、2つの配列間の差を計算するために使用されます。最初の配列に含まれる要素を返しますが、2番目の配列には返されません。配列の値を比較するだけでなく、配列のキー名も比較するため、 array_diff()よりも厳格であることに注意する必要があります。

関数プロトタイプ:

 <span><span><span class="hljs-title function_ invoke__">array_diff_assoc</span></span><span>(</span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array1</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$array2</span></span><span>): </span><span><span class="hljs-keyword">array</span></span><span>
</span></span>
  • $ array1 :最初の配列。

  • $ array2 :2番目の配列。

  • 返品値:$ array2とは異なる$ array1のすべての要素を含む配列。

2。実用的なアプリケーションシナリオ

ユーザーが情報を変更するフォームがあり、ユーザーが送信した情報には名前、電子メール、電話番号などのフィールドが含まれているとします。元のユーザーデータと提出されたフォームデータを比較して、どのフィールドが変更されたかを検出したいと考えています。

3。サンプルコード

ステップ1:ユーザーが提出した元のデータとデータを定義します

まず、ユーザーの元のデータを含む配列と、ユーザーの送信データを含む配列を定義します。

 <span><span><span class="hljs-comment">// これがデータベースに保存されている元のユーザー情報であると仮定します</span></span><span>
</span><span><span class="hljs-variable">$original_data</span></span><span> = [
    </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'John Doe'</span></span><span>,
    </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'[email protected]'</span></span><span>,
    </span><span><span class="hljs-string">'phone'</span></span><span> =&gt; </span><span><span class="hljs-string">'123-456-7890'</span></span><span>
];

</span><span><span class="hljs-comment">// これがユーザーが提出した修正されたフォームデータであると仮定します</span></span><span>
</span><span><span class="hljs-variable">$submitted_data</span></span><span> = [
    </span><span><span class="hljs-string">'name'</span></span><span> =&gt; </span><span><span class="hljs-string">'John Doe'</span></span><span>,  </span><span><span class="hljs-comment">// 名前は変更されていません</span></span><span>
    </span><span><span class="hljs-string">'email'</span></span><span> =&gt; </span><span><span class="hljs-string">'[email protected]'</span></span><span>,  </span><span><span class="hljs-comment">// メールアドレスが変更されました</span></span><span>
    </span><span><span class="hljs-string">'phone'</span></span><span> =&gt; </span><span><span class="hljs-string">'123-456-7890'</span></span><span>  </span><span><span class="hljs-comment">// 電話番号は変更されていません</span></span><span>
];
</span></span>

ステップ2: array_diff_assoc()を使用して、データを比較します

次に、 array_diff_assoc()を使用して、元のデータと送信データを比較して、どのフィールドが変更されたかを調べます。

 <span><span><span class="hljs-comment">// 使用 array_diff_assoc 変更されたフィールドを見つけます</span></span><span>
</span><span><span class="hljs-variable">$changed_fields</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff_assoc</span></span><span>(</span><span><span class="hljs-variable">$submitted_data</span></span><span>, </span><span><span class="hljs-variable">$original_data</span></span><span>);

</span><span><span class="hljs-comment">// 出力修正フィールド</span></span><span>
</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$changed_fields</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"変更されたフィールドはです:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$changed_fields</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$key</span></span></span><span>: </span><span><span class="hljs-subst">$value</span></span><span>\n";
    }
} </span><span><span class="hljs-keyword">else</span></span><span> {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"フィールドは変更されていません。\n"</span></span><span>;
}
</span></span>

出力結果:

 <span><span>変更されたフィールドはです:
</span><span><span class="hljs-symbol">email</span></span><span><span class="hljs-punctuation">:</span></span><span> john.doe</span><span><span class="hljs-meta">@newdomain</span></span><span>.com
</span></span>

4。説明

  • この例では、 array_diff_assoc()はsubmitted_dataoriginal_data arrayのキーと値を比較します。

  • 名前と電話番号が変更されていないため、メールボックスフィールドのみが異なると見なされるため、出力の結果は電子メールフィールドが変更されたことを示しています。

5。最適化:ユーザーが変更を送信したかどうかを検出します

変更されたフィールドの検出に加えて、ユーザーがフォームの変更を送信したかどうかも知る必要があるとします。特定のフィールドが元のデータではなく、送信されたデータに存在する場合、 array_diff_assoc()array_diff_key()の組み合わせによって審査できます。

 <span><span><span class="hljs-comment">// 使用 array_diff_key ユーザーが新しいフィールドを提出したかどうかを検出する</span></span><span>
</span><span><span class="hljs-variable">$new_fields</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_diff_key</span></span><span>(</span><span><span class="hljs-variable">$submitted_data</span></span><span>, </span><span><span class="hljs-variable">$original_data</span></span><span>);

</span><span><span class="hljs-keyword">if</span></span><span> (!</span><span><span class="hljs-keyword">empty</span></span><span>(</span><span><span class="hljs-variable">$new_fields</span></span><span>)) {
    </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"新しいフィールドが提出されました:\n"</span></span><span>;
    </span><span><span class="hljs-keyword">foreach</span></span><span> (</span><span><span class="hljs-variable">$new_fields</span></span><span> </span><span><span class="hljs-keyword">as</span></span><span> </span><span><span class="hljs-variable">$key</span></span><span> =&gt; </span><span><span class="hljs-variable">$value</span></span><span>) {
        </span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"<span class="hljs-subst">$key</span></span></span><span>: </span><span><span class="hljs-subst">$value</span></span><span>\n";
    }
}
</span></span>

6。概要

array_diff_assoc()は、ユーザーが提出したフォームで変更されたフィールドを簡単に検出できる非常に実用的な機能です。実際の開発では、この機能は、ユーザーデータの変更や注文変更などのシナリオでよく使用され、変更を正確に追跡できるようにします。

上記の例を使用すると、RAWデータをユーザー送信データと比較する機能をすばやく実装して、ユーザーの入力をよりよく処理し、フォーム検証を行うことができます。