現在の位置: ホーム> 最新記事一覧> array_udiff_assocとarray_mapを組み合わせて、phpの配列要素の正確な比較を実現する方法は?

array_udiff_assocとarray_mapを組み合わせて、phpの配列要素の正確な比較を実現する方法は?

gitbox 2025-09-28
<span><span><span class="hljs-meta">&lt;?php</span></span><span>
</span><span><span class="hljs-comment">// この部分は、記事の内容とは何の関係もありません,任意のものを含めることができます PHP コメントまたは単純な変数定義</span></span><span>
</span><span><span class="hljs-variable">$dummy</span></span><span> = </span><span><span class="hljs-string">"これは事前に依存しないコードです"</span></span><span>;
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">placeholderFunction</span></span><span>(</span><span><span class="hljs-params"></span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-string">"プレースホルダー関数出力"</span></span><span>;
}

</span><span><span class="hljs-meta">?&gt;</span></span><span>

&lt;hr&gt;

</span><span><span class="hljs-meta">&lt;?php</span></span><span>
<span class="hljs-comment">/**
 * PHP 結合する方法 array_udiff_assoc そして array_map 配列要素の正確な比較を実現します?
 *
 * 存在する PHP 真ん中,2つの配列の要素を比較する必要がある場合,そして、比較プロセスがキー名を考慮することができることを願っています、値とカスタム比較ロジックの場合,
 * array_udiff_assoc そして array_map これらは2つの非常に便利なツールです。この記事では、それらを組み合わせて配列要素の正確な比較を実現する方法について説明します。。
 *
 * 1. array_udiff_assoc 導入
 * array_udiff_assoc() 2つの配列間の違いを比較するために使用されます,同时考虑键名そして键值。その関数プロトタイプは次のとおりです:
 *
 * array_udiff_assoc(array $array1, array $array2, callable $value_compare_func): array
 *
 * ここ $value_compare_func コールバック関数です,カスタム値の比較ロジック。
 *
 * 2. array_map 導入
 * array_map() 可以对数组真ん中的每个要素应用回调函数,新しい配列を生成します。プロトタイプは次のとおりです:
 *
 * array_map(callable $callback, array ...$arrays): array
 *
 * 合格 array_map,我们可以存在する比较前对数组要素进行标准化处理(たとえば、スペースを削除します、統一されたケースなど)。
 *
 * 3. アイデアの組み合わせ
 * - 使用 array_map 2つの配列の統合処理,要素を一貫させます。
 * - 次に、使用します array_udiff_assoc 2つの配列の比較,カスタムコールバックを使用して、より正確な矛盾の判断を達成します。
 *
 * サンプルコード:
 */</span>

</span><span><span class="hljs-comment">// オリジナル配列</span></span><span>
</span><span><span class="hljs-variable">$array1</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-string">' Apple '</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-string">'Banana'</span></span><span>,
    </span><span><span class="hljs-string">'c'</span></span><span> =&gt; </span><span><span class="hljs-string">'Cherry'</span></span><span>
];

</span><span><span class="hljs-variable">$array2</span></span><span> = [
    </span><span><span class="hljs-string">'a'</span></span><span> =&gt; </span><span><span class="hljs-string">'apple'</span></span><span>,
    </span><span><span class="hljs-string">'b'</span></span><span> =&gt; </span><span><span class="hljs-string">'banana '</span></span><span>,
    </span><span><span class="hljs-string">'d'</span></span><span> =&gt; </span><span><span class="hljs-string">'Date'</span></span><span>
];

</span><span><span class="hljs-comment">// 配列要素の統一処理(前面と背面スペースを取り外し、小文字を回します)</span></span><span>
</span><span><span class="hljs-variable">$normalizedArray1</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>));
}, </span><span><span class="hljs-variable">$array1</span></span><span>);

</span><span><span class="hljs-variable">$normalizedArray2</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_map</span></span><span>(function(</span><span><span class="hljs-variable">$value</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strtolower</span></span><span>(</span><span><span class="hljs-title function_ invoke__">trim</span></span><span>(</span><span><span class="hljs-variable">$value</span></span><span>));
}, </span><span><span class="hljs-variable">$array2</span></span><span>);

</span><span><span class="hljs-comment">// カスタム比較関数</span></span><span>
</span><span><span class="hljs-function"><span class="hljs-keyword">function</span></span></span><span> </span><span><span class="hljs-title">compareValues</span></span><span>(</span><span><span class="hljs-params"><span class="hljs-variable">$value1</span></span></span><span>, </span><span><span class="hljs-variable">$value2</span></span><span>) {
    </span><span><span class="hljs-keyword">return</span></span><span> </span><span><span class="hljs-title function_ invoke__">strcmp</span></span><span>(</span><span><span class="hljs-variable">$value1</span></span><span>, </span><span><span class="hljs-variable">$value2</span></span><span>);
}

</span><span><span class="hljs-comment">// 使用 array_udiff_assoc 得る $array1 真ん真ん中と $array2 さまざまな要素</span></span><span>
</span><span><span class="hljs-variable">$difference</span></span><span> = </span><span><span class="hljs-title function_ invoke__">array_udiff_assoc</span></span><span>(</span><span><span class="hljs-variable">$normalizedArray1</span></span><span>, </span><span><span class="hljs-variable">$normalizedArray2</span></span><span>, </span><span><span class="hljs-string">'compareValues'</span></span><span>);

</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-string">"2つの配列の正確な比較後の差異要素:\n"</span></span><span>;
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$difference</span></span><span>);

<span class="hljs-comment">/**
 * 出力結果:
 * Array
 * (
 *     [c] =&gt; cherry
 * )
 *
 * 説明する:
 * - 要素 'c' =&gt; 'Cherry' 存在する $array2 真ん中不存存在する,したがって、それは違いとして識別されます。
 * - 要素 'a' そして 'b' 通り抜けます trim そして strtolower 標準化後,同じと見なされます,因此不存在する结果真ん中。
 *
 * 要約します:
 * 合格结合 array_map そして array_udiff_assoc,可以存在する比较数组时做到既考虑键名,価値も考慮してください,并且可以合格回调函数自定义比较规则,
 * 複雑なデータ差別分析要件に適しています。
 */</span>
</span><span><span class="hljs-meta">?&gt;</span></span><span>
</span></span>