PHPプログラミングでは、2次元配列を処理する場合、2つの配列間の違いを見つける必要がある状況に遭遇することがよくあります。幸いなことに、PHPは強力な組み込み関数array_diff()とarray_column()を提供します。これは、配列の違いを簡単に処理するのに役立ちます。この記事では、これら2つの機能を使用して、2次元アレイのデータの違いを効率的に処理する方法について説明します。
array_diff()関数は、2つ以上の配列の要素を比較し、差動要素を含む新しい配列を返すために使用されます。この関数は、他の配列に存在する要素を削除し、最初の配列に固有の要素のみを保持します。
文法:
array_diff(array $array1, array ...$arrays): array
$ array1 :最初の配列。
$配列:比較のための1つ以上の配列。
array_column()関数は、2次元配列から列のデータを抽出し、列のすべての値を含む配列を返すために使用されます。これは、複雑な2次元配列を扱う場合、特に配列内のデータの列のみを処理する必要がある場合に非常に便利です。
文法:
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$配列:入力2D配列。
$ column_key :抽出される列のキー。
$ index_key :オプション、結果アレイにカスタムインデックスを提供するキー。
ユーザー情報を含む2つの2次元配列が2つあるとします。配列Bではなく、配列Aでユーザーデータを確認する必要があります。
<?php
// 配リストA:ユーザーデータ(名前を含めます、年齢と電子メール)
$arrayA = [
['name' => 'Alice', 'age' => 25, 'email' => 'alice@example.com'],
['name' => 'Bob', 'age' => 30, 'email' => 'bob@example.com'],
['name' => 'Charlie', 'age' => 35, 'email' => 'charlie@example.com'],
];
// 配リストB:已有ユーザーデータ
$arrayB = [
['name' => 'Alice', 'age' => 25, 'email' => 'alice@example.com'],
['name' => 'David', 'age' => 40, 'email' => 'david@example.com'],
];
// 提取配リストA和配リストB社内emailリスト
$emailsA = array_column($arrayA, 'email');
$emailsB = array_column($arrayB, 'email');
// 使用array_diff()找出在配リストA真ん中但不在配リストB社内email
$diffEmails = array_diff($emailsA, $emailsB);
// 違いデータを取得します(在配リストA真ん中但不在配リストB真ん中)
$diffData = [];
foreach ($arrayA as $user) {
if (in_array($user['email'], $diffEmails)) {
$diffData[] = $user;
}
}
// 出力微分データ
echo "<pre>";
print_r($diffData);
echo "</pre>";
?>
電子メール列を抽出します。Array_Column ()を使用して、2次元配列からすべてのユーザーの電子メールアドレスを抽出し、すべての電子メールアドレスを含む2つの配列$ emailsaと$ emailsbを生成します。
違いを見つけます。次に、 array_diff()関数を使用して2つの電子メール配列を比較して、 $ emailsbではなく$ emailsaで電子メールアドレスを見つけます。返された$ diffemailsアレイには、すべての差異メールが含まれています。
違いデータを取得する:最後に、 $ arrayaを通過して、差異のメールアドレスに基づいてユーザーの完全な情報を取得します。各ユーザーの電子メールがIN_ARRAY()関数を介して$ diffeMailsであるかどうかを確認し、その場合、そのユーザー情報を$ diffdataアレイに追加します。
出力の結果:結果配列$ diffdataには、配列Aにはすべてのユーザー情報が含まれていますが、アレイBには含まれていません。
上記のコードによると、出力は次のとおりです。
Array
(
[0] => Array
(
[name] => Bob
[age] => 30
[email] => bob@example.com
)
[1] => Array
(
[name] => Charlie
[age] => 35
[email] => charlie@example.com
)
)
上記のように、ボブとチャーリーは配列Aのユーザーであり、アレイBではありません。