php array_merge 함수 다시 이해하기
오늘은 버그로 인해 array_merge() 함수를 다시 살펴봤습니다.
정의: array_merge — 하나 이상의 배열 병합
지정: array array_merge(array $array1 [, array $...])
설명:
1. 하나 이상의 배열의 셀을 결합하고, 한 배열의 값이 이전 배열의 끝에 추가됩니다.
2. 입력 배열의 문자열 키 이름이 동일한 경우 키 이름 뒤의 값이 이전 값을 덮어씁니다. 그러나 배열에 숫자 키가 포함된 경우 후속 값은 원래 값을 덮어쓰지 않고 추가됩니다.
3. 배열이 하나만 주어지고 배열이 숫자로 색인화되면 키 이름이 연속적으로 다시 색인화됩니다.
이 기능은 설명서에 자세한 예시가 나와 있고 매우 다양하고 실용적입니다.
오늘 제가 겪은 문제는 매뉴얼에 경고가 있었는데, 이전에는 이를 인지하지 못하여 치명적인 오류가 발생한 것입니다. 다음과 같습니다:
PHP >= 버전 5.0, array_merge()는 배열 유형 매개변수만 허용합니다. 그러나 캐스트를 사용하여 다른 유형을 결합할 수 있습니다.
foreach 및 기타 코드에서 생성된 배열 변수에 주의하세요. 변수를 빈 배열로 초기화하거나 병합 중에 강제 변환을 수행하세요. 그렇지 않으면 많은 고통을 겪게 될 것입니다. 그러므로 변수를 초기화하는 습관을 유지하는 것도 좋은 방법입니다.
PHP에서는 배열을 병합하는 경우가 두 가지 있습니다
1. 두 배열의 문자열 키 이름이 동일한 경우:
<?php $book1 = array('linux'=>'linux服务器配置与管理','php'=>'PHP程序设计'); $book2 = array('linux'=>'服务器配置与管理','jsp'=>'PHP'); $result = array_merge($book1,$book2); print_r($result); ?>
출력은 다음과 같습니다.
Array ( [linux] => 服务器配置与管理 [php] => PHP程序设计 [jsp] => PHP )
후자가 전자를 대체한다는 점에 유의하십시오. 그러나 array_merge_recursive()를 사용하면 하위 배열로 유지되어 존재할 수 있습니다. 예:
<?php $book1 = array('linux'=>'linux服务器配置与管理','php'=>'PHP程序设计'); $book2 = array('linux'=>'服务器配置与管理','jsp'=>'PHP'); $result = array_merge_recursive($book1,$book2); print_r($result); ?>
출력은 다음과 같습니다.
Array ( [linux] => Array ( [0] => linux服务器配置与管理 [1] => 服务器配置与管理 ) [php] => PHP程序设计 [jsp] => PHP )
2. 두 배열의 숫자 키 이름이 동일한 경우:
<?php $book1 = array('linux服务器配置与管理','PHP程序设计'); $book2 = array('服务器配置与管理','PHP'); $result = array_merge($book1,$book2); print_r($result); ?>
결과는 다음과 같습니다.
Array ( [0] => linux服务器配置与管理 [1] => PHP程序设计 [2] => 服务器配置与管理 [3] => PHP )
이때, 배열에 동일한 숫자 키 이름이 포함되어 있으면 후속 키 값이 이전 값을 덮어쓰지 않지만, 후속 키 값은 순서대로 증가하여 끝에 추가됩니다. 알겠어요 ^_^