현재 위치: > 최신 기사 목록> array_diff_key ()의 인수로 개체를 사용할 수 있습니까?

array_diff_key ()의 인수로 개체를 사용할 수 있습니까?

M66 2025-06-06

PHP에서 Array_Diff_Key () 는 일반적으로 사용되는 배열 기능으로, 두 개 이상의 배열 사이의 주요 차이를 계산하고 첫 번째 배열에 존재하지만 다른 배열에는 존재하지 않는 리턴 키 차이를 계산합니다. 그러나 많은 개발자들이 객체를 매개 변수로 함수로 전달할 수 있는지 궁금 할 수 있습니다. 오늘,이 문제에 대해 자세히 논의합시다.

array_diff_key () 의 기본 사용

Array_Diff_Key () 함수는 매개 변수로 둘 이상의 배열을 가져 와서 첫 번째 배열에 존재하지만 다른 배열에는 존재하지 않는 새 배열을 포함합니다. 기본 구문은 다음과 같습니다.

 array_diff_key(array $array1, array ...$arrays): array

예를 들어:

 $array1 = ['a' => 1, 'b' => 2, 'c' => 3];
$array2 = ['a' => 4, 'd' => 5];
$result = array_diff_key($array1, $array2);
print_r($result);

산출:

 Array
(
    [b] => 2
    [c] => 3
)

이 예에서 $ 결과 배열에는 $ array1 의 Keys 'b''c' 가 포함되어 있습니다. 이러한 키는 $ array2 에 존재하지 않기 때문입니다.

array_diff_key () 에 대한 인수로 객체를 사용할 수 있습니까?

array_diff_key () 의 함수 서명은 매개 변수가 배열 유형 ( 배열 )이어야합니다. 따라서 객체를 매개 변수로 직접 전달하면 오류가 발생합니다. 예를 들어:

 $obj1 = (object)['a' => 1, 'b' => 2];
$obj2 = (object)['a' => 4, 'd' => 5];

$result = array_diff_key($obj1, $obj2);  // 실수!

$ obj1$ obj2는 배열이 아닌 개체이기 때문에이 코드는 오류가 발생합니다.

해결책 : 객체를 배열로 변환합니다

객체를 Array_diff_key () 로 직접 전달할 수는 없지만 객체를 배열로 변환 하여이 문제를 해결할 수 있습니다. PHP는 캐스팅과 같은 객체-배열 변환을 구현하는 다양한 방법을 제공합니다.

 $obj1 = (object)['a' => 1, 'b' => 2];
$obj2 = (object)['a' => 4, 'd' => 5];

// 배열로 변환하십시오
$array1 = (array)$obj1;
$array2 = (array)$obj2;

$result = array_diff_key($array1, $array2);
print_r($result);

산출:

 Array
(
    [b] => 2
)

주목해야 할 것

  1. 객체 속성 : 객체를 배열로 변환하면 객체의 공개 속성이 배열의 키가됩니다. 객체에 개인 또는 보호 된 속성이 있으면 접근 할 수 없습니다. 따라서 Array_Diff_Key ()는 공개 속성에만 적용됩니다.

  2. 객체 방법 : Array_Diff_Key ()는 배열의 키에 대해서만 관심이 있으므로 객체의 메소드 (있는 경우)는 고려되지 않습니다.

  3. 객체 복잡성 : 복잡한 객체 (예 : 중첩 객체 또는 배열이 포함 된 객체)의 경우 먼저 배열로 재귀 적으로 변환해야 할 수도 있습니다.

요약

  • array_diff_key ()는 함수가 배열을 전달해야하기 때문에 객체를 매개 변수로 직접 허용 할 수 없습니다.

  • 객체를 매개 변수로 사용하려면 객체를 배열로 변환 한 다음 Array_Diff_Key ()를 사용하여 그렇게 할 수 있습니다.

  • 변환 할 때, 특히 개인 또는 보호 된 속성이 관련된 경우 객체의 속성이 귀하의 요구를 충족하는지 여부에주의하십시오.

이러한 방식으로 객체와 배열의 차이를 처리 할 수있는 유연성을 가진 Array_Diff_Key ()를 사용할 수 있습니다. 이 기사가 도움이되기를 바랍니다!