PHPでは、 array_diff()は、最初の配列に存在するが他の配列には存在する2つ以上の配列と戻り値を比較するための非常に実用的な機能です。特殊文字( @ 、 # 、 % 、 &などなど)を含む文字列配列を処理すると、この関数を使用して、微分セット比較を簡単に実装することもできます。
この記事では、array_diff()の基本的な使用法を紹介し、例を使用して、特殊文字を含む文字列配列を処理する方法を示します。
array_diff(array $array1, array ...$arrays): array
この関数は、 $ array1を1つ以上の配列と比較し、 $ array1にのみ存在し、他の配列には表示されない値を返します。
注:比較は値に基づいており、ゆるい比較(==)を使用し、キー名を比較しません。
次のコンテンツに2つの配列があるとします。
$array1 = ['apple', 'banana', 'cherry@', 'date#', 'egg&'];
$array2 = ['banana', 'date#', 'fig$', 'grape'];
$ array1に存在するが、特殊文字が含まれていても、 $ array2に存在しない要素を見つけたいです。
array_diff()を直接使用できます。これは、文字列を比較するときにPHPが特殊文字の特別な処理を行わないため、正常に比較できるためです。
<?php
$array1 = ['apple', 'banana', 'cherry@', 'date#', 'egg&'];
$array2 = ['banana', 'date#', 'fig$', 'grape'];
$result = array_diff($array1, $array2);
echo "微分結果:\n";
print_r($result);
// これらの違い要素のいずれかを生成したい場合 URL クエリパラメーターフォーム:
$queryString = http_build_query(['items' => array_values($result)]);
echo "\n次のリンクを使用して、クエリ結果ページにアクセスできます:\n";
echo "https://m66.net/show_diff.php?$queryString";
?>
出力の結果は次のとおりです。
微分結果:
Array
(
[0] => apple
[2] => cherry@
[4] => egg&
)
次のリンクを使用して、クエリ結果ページにアクセスできます:
https://m66.net/show_diff.php?items%5B0%5D=apple&items%5B1%5D=cherry%40&items%5B2%5D=egg%26
特殊文字は、array_diff()の仕組みに影響しません。
ケースの違いとの比較に対処する必要がある場合は、最初に配列内の要素を均一に処理できます( strtolower()など)。
ユーザー入力から文字列配列を取得した場合は、噴射攻撃やその他の問題を防ぐために、基本的なフィルタリングとエスケープを行うことを忘れないでください。
異なるソース(データベースやユーザーアップロードされたデータなど)の2つのデータセットを比較します。
非合成データレコードを特定します。
キーワードフィルタリング関数を実装し、フィルタリングされた語彙ライブラリなどでカバーされていない入力コンテンツを見つけます。