PHP 다차원 배열 비교가 다릅니다

PHPz
풀어 주다: 2023-05-22 21:31:06
원래의
534명이 탐색했습니다.

PHP에서 다차원 배열은 복잡한 데이터 관계를 쉽게 표현할 수 있는 매우 일반적인 데이터 구조입니다. 그러나 실제 개발에서는 두 개의 다차원 배열의 차이점을 비교해야 하는 경우가 종종 있는데 이는 매우 어려운 작업입니다. 이 기사에서는 PHP를 사용하여 두 개의 다차원 배열을 비교하고 차이점을 찾는 방법을 설명합니다.

편의를 위해 먼저 $arr1과 $arr2라는 두 개의 다차원 배열을 정의합니다. 해당 샘플 코드는 다음과 같습니다.

$arr1 = array(
    'name' => 'Tom',
    'age' => 20,
    'address' => array(
        'city' => 'Beijing',
        'region' => 'Haidian',
    ),
    'contact' => array(
        'phone' => '123456',
        'email' => 'tom@example.com',
    ),
);

$arr2 = array(
    'name' => 'Jerry',
    'age' => 22,
    'address' => array(
        'city' => 'Beijing',
        'region' => 'Chaoyang',
    ),
    'contact' => array(
        'phone' => '789012',
        'email' => 'jerry@example.com',
    ),
);
로그인 후 복사

위 코드에서 $arr1 및 $arr2에는 모두 동일하거나 다른 키-값 쌍이 포함되어 있으며 일부 키-값 쌍의 값도 배열입니다. 우리는 이 두 배열을 비교하고 그 차이를 인쇄하려고 합니다.

먼저 array_diff_assoc() 함수를 사용하여 두 배열 간의 차이점을 비교할 수 있습니다. 이 함수는 $arr1에는 있지만 $arr2에는 없는 키-값 쌍과 해당 값을 반환합니다. 코드는 다음과 같습니다.

$diff1 = array_diff_assoc($arr1, $arr2);
print_r($diff1);
로그인 후 복사

출력은 다음과 같습니다.

Array
(
    [name] => Tom
    [age] => 20
    [address] => Array
        (
            [region] => Haidian
        )

    [contact] => Array
        (
            [phone] => 123456
            [email] => tom@example.com
        )

)
로그인 후 복사
로그인 후 복사

$diff1에는 $arr1에는 있지만 $arr2에는 없는 키-값 쌍과 그 값이 포함되어 있음을 알 수 있습니다. 그 중 'name' 키에 해당하는 값은 'Tom', 'age' 키에 해당하는 값은 20, 'address' 키에 해당하는 값은 'region' 키-값 쌍을 포함하는 배열이다. , '연락처' 키 값에 해당하는 값도 배열입니다.

다음으로 재귀 함수를 사용하여 배열이 포함된 $arr1 및 $arr2의 모든 키-값 쌍 간의 차이점을 비교하겠습니다. 코드는 다음과 같습니다.

function compareArray($arr1, $arr2) {
    $diff = array();
    foreach ($arr1 as $key => $val1) {
        if (is_array($val1) && isset($arr2[$key]) && is_array($arr2[$key])) {
            $diff[$key] = compareArray($val1, $arr2[$key]);
        } elseif (!isset($arr2[$key]) || $arr2[$key] !== $val1) {
            $diff[$key] = $val1;
        }
    }
    foreach ($arr2 as $key => $val2) {
        if (is_array($val2) && (!isset($arr1[$key]) || !is_array($arr1[$key]))) {
            $diff[$key] = $val2;
        }
    }
    return $diff;
}

$diff2 = compareArray($arr1, $arr2);
print_r($diff2);
로그인 후 복사

출력 결과는 다음과 같습니다.

Array
(
    [name] => Tom
    [age] => 20
    [address] => Array
        (
            [region] => Haidian
        )

    [contact] => Array
        (
            [phone] => 123456
            [email] => tom@example.com
        )

)
로그인 후 복사
로그인 후 복사

보시다시피 $diff2는 $arr1과 $arr2의 배열을 포함하는 모든 키-값 쌍 간의 차이를 출력합니다. 그 중 'name' 키에 해당하는 값은 'Tom', 'age' 키에 해당하는 값은 20, 'address' 키에 해당하는 값은 'region' 키-값 쌍을 포함하는 배열이다. , '연락처' 키 값에 해당하는 값도 배열입니다.

마지막으로 $diff1과 $diff2를 비교하여 어떻게 유사하고 다른지 확인할 수 있습니다. 코드는 다음과 같습니다.

$intersection = array_intersect_assoc($diff1, $diff2);
$difference = array_merge($diff1, $diff2);
$difference = array_diff_key($difference, $intersection);

echo "intersection:
";
print_r($intersection);
echo "difference:
";
print_r($difference);
로그인 후 복사

출력은 다음과 같습니다.

intersection:
Array
(
    [name] => Tom
    [age] => 20
    [address] => Array
        (
            [region] => Haidian
        )

    [contact] => Array
        (
            [phone] => 123456
            [email] => tom@example.com
        )

)
difference:
Array
(
    [name] => Jerry
    [age] => 22
    [address] => Array
        (
            [region] => Chaoyang
        )

    [contact] => Array
        (
            [phone] => 789012
            [email] => jerry@example.com
        )

)
로그인 후 복사

$intersection에는 $diff1과 $diff2 모두에 존재하는 키-값 쌍, 즉 $의 동일한 키-값 쌍이 포함되어 있음을 알 수 있습니다. arr1 및 $arr2. $difference에는 $diff1 및 $diff2에 존재하는 다양한 키-값 쌍이 포함되어 있습니다.

요약하자면, PHP의 array_diff_assoc() 함수와 재귀 함수를 사용하여 두 개의 다차원 배열을 비교하고 차이점을 찾을 수 있습니다. 이 방법은 비교적 복잡하지만 매우 실용적이어서 실제 개발에 널리 사용할 수 있습니다.

위 내용은 PHP 다차원 배열 비교가 다릅니다의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!