웹 개발에서 사용자는 양식을 제출할 때 제출 된 데이터를 원본 데이터, 특히 사용자 정보 수정 시나리오에서 비교해야합니다. 예를 들어, 사용자는 개인 정보를 수정했으며 수정 된 필드를 감지하려고합니다. PHP가 제공하는 Array_Diff_Assoc () 함수는이 작업을 쉽게 완성하는 데 도움이 될 수 있습니다. 오늘날, 우리는이 기능을 사용하여 실제적인 경우를 통해 수정 된 필드를 형태로 감지하는 방법을 배웁니다.
array_diff_assoc () 함수는 키 이름과 키 값의 비교를 기반으로 두 배열의 차이를 계산하는 데 사용됩니다. 첫 번째 배열에 포함 된 요소를 반환하지만 두 번째 배열에는 없습니다. 배열의 값을 비교할뿐만 아니라 배열의 주요 이름을 비교하므로 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 : 두 번째 배열.
반환 값 : $ array2 와 다른 $ array1의 모든 요소를 포함하는 배열.
사용자가 정보를 수정하는 양식이 있고 사용자가 제출 한 정보에 이름, 이메일, 전화 번호 등과 같은 필드가 포함되어 있다고 가정합니다. 원본 사용자 데이터를 제출 된 양식 데이터와 비교하여 수정 된 필드를 감지하려고합니다.
먼저, 사용자의 원래 데이터가 포함 된 배열과 사용자의 제출 된 데이터가 포함 된 배열을 정의하십시오.
<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> => </span><span><span class="hljs-string">'John Doe'</span></span><span>,
</span><span><span class="hljs-string">'email'</span></span><span> => </span><span><span class="hljs-string">'[email protected]'</span></span><span>,
</span><span><span class="hljs-string">'phone'</span></span><span> => </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> => </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> => </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> => </span><span><span class="hljs-string">'123-456-7890'</span></span><span> </span><span><span class="hljs-comment">// 전화 번호가 변경되지 않았습니다</span></span><span>
];
</span></span>
다음으로 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> => </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>
이 예에서 Array_Diff_Assoc ()는 제출 된 _Data 및 Original_Data 배열의 키와 값을 비교합니다.
이름과 전화 번호가 변경되지 않았으므로 사서함 필드 만 다르게 간주되므로 출력 결과는 이메일 필드가 수정되었음을 보여줍니다.
수정 된 필드를 감지하는 것 외에도 사용자가 양식으로 수정을 제출했는지 알고 싶습니다. 특정 필드가 원래 데이터에 존재하지 않고 제출 된 데이터에 존재하는 경우 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> => </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>
Array_Diff_Assoc () 은 사용자가 제출 한 형식으로 수정 된 필드를 쉽게 감지하는 데 도움이되는 매우 실용적인 기능입니다. 실제 개발 에서이 기능은 종종 사용자 데이터 수정 및 순서 수정과 같은 시나리오에 사용되어 변경 사항을 정확하게 추적 할 수 있습니다.
위의 예를 통해 원시 데이터를 사용자 제출 데이터와 비교하는 기능을 빠르게 구현하여 사용자 입력 및 양식 검증을 더 잘 처리 할 수 있습니다.