PHP 프로그래밍에서 2 차원 배열을 처리 할 때 두 배열의 차이를 찾아야하는 상황이 종종 발생합니다. 다행스럽게도 PHP는 강력한 내장 함수 array_diff () 및 Array_column ()을 제공하여 배열 차이를 쉽게 처리 할 수 있도록 도와줍니다. 이 기사는이 두 기능을 사용하여 2 차원 배열의 데이터 차이를 효율적으로 처리하는 방법을 설명합니다.
Array_diff () 함수는 둘 이상의 배열의 요소를 비교하고 차동 요소를 포함하는 새로운 배열을 반환하는 데 사용됩니다. 이 함수는 다른 배열에 존재하는 요소를 삭제하여 첫 번째 배열에 고유 한 요소 만 유지합니다.
문법:
array_diff(array $array1, array ...$arrays): array
$ array1 : 첫 번째 배열.
$ 배열 : 비교를위한 하나 이상의 배열.
Array_Column () 함수는 2 차원 배열에서 열의 데이터를 추출하고 열의 모든 값을 포함하는 배열을 반환하는 데 사용됩니다. 이것은 복잡한 2 차원 배열, 특히 배열에서 데이터 열만 처리해야 할 때 매우 유용합니다.
문법:
array_column(array $array, mixed $column_key, mixed $index_key = null): array
$ 배열 : 입력 2D 배열.
$ column_key : 추출 할 열 키입니다.
$ index_key : 옵션, 결과 배열에 대한 사용자 정의 인덱스를 제공하는 키.
사용자 정보가 포함 된 2 개의 2 차원 배열이 있다고 가정합니다. 배열 이 아닌 배열 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 개의 배열 $ 이메일 과 모든 이메일 주소가 포함 된 $ emailsb를 생성합니다.
차이점을 찾으십시오. 그런 다음 Array_diff () 함수를 사용하여 두 이메일 배열을 비교하여 $ emailsa 에서 이메일 주소를 찾으십시오. 반환 된 $ DiffeMails 어레이에는 모든 차별 이메일이 포함되어 있습니다.
차이 데이터 가져 오기 : 마지막으로, 우리는 $ arraya를 통과하여 차이의 이메일 주소를 기반으로 사용자의 전체 정보를 얻습니다. 각 사용자의 이메일이 in_array () 함수를 통해 $ diffemail 인지 확인하고 그렇다면 해당 사용자 정보를 $ 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
)
)
위에서 볼 수 있듯이 Bob과 Charlie는 배열 A 가 아닌 Array A 의 사용자입니다.