배열(Arrays)

배열을 실제로 hash tables (associative arrays) 과 indexed arrays (vectors)의 두가지로 동시에 사용된다.

일차원 배열 (Single Dimension Arrays)

PHP는 scalar 배열과 associative 배열의 두 가지를 지원한다. 사실 두 가지의 차이는 없다. 여러분은 list()array() 함수를 사용하여 배열을 만들거나, 각 원소의 값을 정해 주어 배열을 만들 수 있다.

$a[0] = "abc"; 
$a[1] = "def"; 
$b["foo"] = 13;

또한 다음과 같이 변수에 값을 더해주는 것만으로 배열을 만들 수도 있다. 배열 변수에 빈 대괄호([])를 붙이고 값을 지정하면, 해당 배열의 맨뒤에 한 원소가 추가되고 그 값이 이 추가된 원소에 저장된다.

$a[] = "hello"; // $a[2] == "hello"
$a[] = "world"; // $a[3] == "world"

배열은 정렬을 원하는 형식에 따라 asort(), arsort(), ksort(), rsort(), sort(), uasort(), usort(), uksort() 함수들을 이용해 순서대로 정렬할 수 있다.

count() 함수를 사용하면 배열의 원소 개수를 셀 수 있다.

next()prev()함수를 이용하여 배열의 내용을 탐색할 수 있다. 배열의 내용을 탐색하는 방법으로 each()함수를 사용할 수도 있다.

다차원 배열 (Multi-Dimensional Arrays)

다차원 배열도 실제로 매우 간단한다. 배열의 각 차원에 대하여 단지 [key]값을 뒤에 붙여주면 된다.:

$a[1]      = $f;               # 일차원 배열의 예제
$a["foo"]  = $f;   

$a[1][0]     = $f;             # 이차원 배열의 예제
$a["foo"][2] = $f;             # (배열 지시자를 숫자와 문자로 혼합할수 있다)
$a[3]["bar"] = $f;             # (배열 지시자를 숫자와 문자로 혼합할수 있다)

$a["foo"][4]["bar"][0] = $f;   # 4차원배열!

PHP3에서, 문자열 내에서 다차원 배열의 값을 직접 접근하는 것은 불가능하다. 예를들어 다음과 같은 문장은 원하는 결과를 얻지 못할 것이다.:

$a[3]['bar'] = 'Bob';
echo "This won't work: $a[3][bar]";

PHP3에서 위의 출력은 This won't work: Array[bar] 일 것이다. 원하는 결과를 얻으려면 문자열 연결 연산자(.)를 사용하여야 할 것이다. :

$a[3]['bar'] = 'Bob';
echo "This will work: " . $a[3][bar];

PHP4에서는 접근하려는 배열식을 중괄호({})로 둘러쌈으로써 이것이 가능하다.:

$a[3]['bar'] = 'Bob';
echo "This will work: {$a[3][bar]}";

여러 가지 방법으로 이 다차원 배열에 값을 넣을 수 있으나, associative 배열에 값을 저장하는 간단한 방법으로 array() 명령을 사용하는 방법이 있다. 우선 다음의 두가지 코드는 일차원 배열에 값을 저장하는 방법으로 결과는 동일하다.:

# Example 1:

$a["color"]	= "red";
$a["taste"]	= "sweet";
$a["shape"]	= "round";
$a["name"]	= "apple";
$a[3]		= 4;

# Example 2:
$a = array(
     "color" => "red",
     "taste" => "sweet",
     "shape" => "round",
     "name"  => "apple",
     3       => 4
);

array() 함수는 다차원 배열에 대해서도 다음과 같이 사용할 수 있다. :

<?php
$a = array(
     "apple"  => array(
          "color"  => "red",
          "taste"  => "sweet",
          "shape"  => "round"
     ),
     "orange"  => array(
          "color"  => "orange",
          "taste"  => "tart",
          "shape"  => "round"
     ),
     "banana"  => array(
          "color"  => "yellow",
          "taste"  => "paste-y",
          "shape"  => "banana-shaped"
     )
);

echo $a["apple"]["taste"];    # will output "sweet"
?>