PHPの毎日の開発では、 array_diff()関数は、アレイで微分操作を実行するためによく使用されます。 1つの配列に存在するが、他の配列には存在しない値を見つけるのに役立ちます。これは、データフィルタリングや許可制御などのシナリオを処理するのに非常に実用的です。
ただし、見落とされがちな質問は、結果を返すときにarray_diff()が元の配列のキー名を保持しますか?それとも、アレイを自動的に再インデックスしますか?
簡単な例を見てみましょう。
<?php
$array1 = ["a" => "green", "b" => "brown", "c" => "blue", "red"];
$array2 = ["green", "yellow", "red"];
$result = array_diff($array1, $array2);
print_r($result);
?>
出力の結果は次のとおりです。
Array
(
[b] => brown
[c] => blue
)
ご覧のとおり、結果はarray_diff()によって返されます。文字列キーでさえ再インネックスされていません。
実際に結果アレイを再インデックスしたい場合は、 array_values()を手動で使用できます。
$reindexed = array_values(array_diff($array1, $array2));
print_r($reindexed);
出力:
Array
(
[0] => brown
[1] => blue
)
この場合、キー名は0から始まる連続番号インデックスにリセットされます。
ユーザーがタグのセットを送信し、システムに既に存在するコンテンツを削除すると仮定します。
<?php
$userTags = [
10 => "php",
11 => "html",
12 => "custom"
];
$defaultTags = ["php", "html", "css", "javascript"];
$finalTags = array_diff($userTags, $defaultTags);
print_r($finalTags);
?>
出力結果:
Array
(
[12] => custom
)
これは、この関数がユーザーの元の配列のキー名を保持していることを示しています。これは、データベースの挿入または更新操作で価値のある情報になる可能性があります。
array_diff()は、キー名に関係なく、値のみを比較します。
キー名に基づいて比較する場合は、 array_diff_key()を使用できます。
キー名と値を同時に比較する場合は、 array_diff_assoc()を使用できます。