WebApp/PHP2010. 6. 25. 16:08
PHP에는 배열을 합칠 수 있는 array_merge()함수가 있다.
인자는 두 개의 배열로써 호출할 때는 다음과 같이 호출한다.
$array = array_merge($array1, $array2);

$array1에 $array2에 내용을 끼워 넣어 결과 값을 리턴한다.
그렇기 때문에, 다음 코드를 실행하게 되면
$array[0] = array(1, 2, 3);
$array[1] = array("a", "b", "c");
for($i=0; $i<count($array); $i++) {
$return = array_merge($array[$i], $return);
}
print_r($return);

$array[1]에 $array[0]을 끼워넣는 것이 되므로, 다음과 같이 아래 위가 뒤집힌 값이 나타난다.
Array
(
[0] => a
[1] => b
[2] => c
[3] => 1
[4] => 2
[5] => 3
)
이를 바로잡기 위해서는 함수 인자들의 위치를 신경 써주어야 하겠다.

또한, array_merge함수의 다른 한 가지 특징은 해당 숫자 배열이 존재하는 경우 그 배열명을 피해서 저장한다는 점에 있다.
눈치가 빠른 사람들은 위의 예제에서 눈치 챘겠지만, 위의 예제에서 사용한 배열 두 개의 값은 다음과 같다.
Array
(
[0] => 1
[1] => 2
[2] => 3
)
Array
{
[0] => a
[1] => b
[2] => c
)
이렇게 중복되는 배열명이 존재하는 경우 그것을 자동적으로 피해서 저장하는 것이다.

하지만 문자 배열의 경우에는 신경을 쓸 필요가 있다. 다음 예제를 살펴보자.
$array1 = array("id" => "identification");
$array2 = array("id" => "i.d.");
$result = array_merge($array1, $array2);
print_r($result);
이것을 실행하게 되면 다음과 같은 결과 값이 나타난다.
Array
(
[id] => Array
(
[0] => identification
[1] => i.d.
)
)
배열이 아니었던 배열명 id의 값을 배열로 저장하고 있는 것이다.

array_merge는 다차원배열도 물론 지원한다.
$array1 = array("member" => array("id"=>"identification"));
$array2 = array("member" => array("pw" => "password"));
$result = array_merge($array1, $array2);
print_r($result);
위의 코드를 실행시키면 , 다음과 같은 결과 값이 나타난다.
Array
(
[member] => Array
(
[id] => identification
[pw] => password
)
)

하지만 1차 배열명이 숫자인 경우에는 문제가 좀 달라진다.
$array1 = array(array("id"=>"identification"));
$array2 = array(array("pw" => "password"));
$result = array_merge($array1, $array2);
print_r($result);
혹시 다음과 같은 결과 값을 예상하고 있지는 않은가?
Array
(
[0] => Array
(
[id] => identification
[pw] => password
)
)
하지만 array_merge()함수는 이처럼 작동하지 않는다.
해당 배열명이 숫자 그리고 그 배열명에 해당하는 값이 NULL이 아닌경우,
NULL값인 숫자 배열명이 나타날때까지 찾아서 그곳에 값을 입력한다.
위의 코드를 통해 말하자면, 현재 [0]은 NULL이 아니므로, 다음 숫자 배열명인 [1]에 값을 저장하게 되는 것이다.
그러므로 위 코드의 결과 값은 다음과 같이 나타난다.
Array
(
[0] => Array
(
[id] = identification
)
[1] => Array
(
[pw] = password
)
)

문자 배열이나 숫자 배열이나 일관된 방법으로 배열을 저장하는 함수를 개발 중이므로,
개발이 완료되면 공개하도록 하겠다.

'WebApp > PHP' 카테고리의 다른 글

foreach 배열 반복  (0) 2010.08.12
다차원배열의 구성  (0) 2010.06.26
Form과 Input 태그로 배열 넘기기  (0) 2010.06.24
파일 경로 숨긴 채로 전송 및 다운로드하기  (0) 2010.06.07
파일 읽기 함수  (0) 2010.05.30
Posted by 마이클