출처 : https://opentutorials.org/course/779/4930
대부분의 프로그래밍 언어에서 지원하는 방식이다.
1 2 3 4 5 6 7 8 9 10 11 12 | // 방식 1$products = array('Tires', 'Oil', 'Spark Plugs');// 방식 2$numbers = range(1, 10); // 1~10$odds = range(1, 10, 2); // 1,3,5,7,9$letters = range('a', 'z'); // a~z// 방식 3$products[0] = 'Tires'; // $products가 미리 정의되어 있지 않아도 된다.$products[1] = 'Oil';$products[2] = 'Spark Plugs'; |
php는 배열의 크기가 동적으로 늘어나는 방식이라서 방식 3과 같은 형태로도 배열을 생성할 수 있다.
배열에 접근하는 방식은 타 언어와 마찬가지로 $products[0], $products[1], $products[2] 처럼 접근한다.
현대 프로그래밍 언어들은 연관 배열을 지원하는 경우도 흔히 볼 수 있다. 연관 배열은 인덱스를 문자열로 사용하여 그 값에 의미를 붙여 사용하는 방식이다.
1 2 3 4 5 6 7 8 9 10 11 | // 방식 1$prices = array( 'Tires'=>100, 'Oil'=>10, 'Spark Plugs'=>4);// 방식 2$prices['Tires'] = 100;$prices['Oil'] = 10;$prices['Spark Plugs'] = 4; |
배열에 접근하는 방법은 방식 2의 좌변처럼 접근하면 된다. 연관 배열은 숫자 인덱스가 없기 때문에 루프로 접근할 때 일반적인 방법으로는 for문으로 접근할 수 없다. 대신에 foreach문과 같은 방법을 사용한다.
1 2 3 4 5 6 7 8 9 | // 숫자 인덱스 배열foreach($array as $item) { echo $item." ";}// 연관 배열foreach($array as $key => $value) { echo "$key : $value".'<br />';} |
foreach 문의 사용법은 위와 같다. 단, 연관 배열도 숫자 인덱스 배열 방식처럼 사용하면 값만 가져와 사용할 수도 있다.
여기서 $prices는 위의 연관 배열 부분에서 정의한 배열이라고 생각하면 이해가 쉽다.
1 2 3 4 | while($element = each($prices)) { echo $element['key'].' - '; echo $element['value']. '<br />';} |
$prices의 키가 $element['key']에 저장되고 값은 $element['value']에 저장된다.
each() 함수는 현재 요소를 리턴하고 다음 요소를 현재 요소로 가리킨다.
1 2 3 4 5 | reset($prices); // 밑에서 설명while(list($product, $price) = each($prices)) { echo "$product - $price<br />";} |
list() 함수는 배열을 저장된 값만큼 분할한다. 키는 $product에, 값은 $price에 저장된다.
언뜻 보면 복잡하지만 역시 타 언어와 다른 점이 크게 없으므로 간략하게 코드만 보고 넘어간다.
1 2 3 4 5 6 7 8 9 10 11 12 | // 2차원 배열$products = array( array('TIR', 'Tires', 100), array('OIL', 'Oil', 10), array('SPK', 'Spark Plugs', 4) );// 출력for($row=0; $row<3; $row++) { for($col=0, $col<3; $col++) { echo '|'.$products[$row][$col]; } echo '|<br />';} |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | // 2차원 연관 배열$products = array( array('Code' => 'TIR', 'Description' => 'Tires', 'Price' => 100 ), array('Code' => 'OIL', 'Description' => 'Oil', 'Price' => 10 ), array('Code' => 'SPK', 'Description' => 'Spark Plugs', 'Price' => 4 ));// 출력 1for($row=0, $row<3; $row++) { echo '|'.$products[$row]['Code']; echo '|'.$products[$row]['Description']; echo '|'.$products[$row]['Price'].'|<br />';}// 출력 2for($row=0; $row<3; $row++) { while(list($key, $value) = each($products[$row])) { echo "|$value"; } echo '|<br />';} |
3차원 이상의 배열도 같은 방식으로 array를 겹쳐주면 된다.(생략)
1 2 3 4 5 6 | $products = array('Tires', 'Oil', 'Spark Plugs');sort($products); // Oil, Spark Plugs, Tires$prices = array(100, 10, 4);sort($prices); // 4, 10, 100sort($prices, SORT_STRING); // 10, 100, 4 |
sort()는 알파벳이나 크기순으로 배열을 정렬한다.
sort()의 두 번째 인자 값(문자열이나 숫자를 포함하고 있을 때 사용)
1 2 3 4 5 6 7 | $prices = array( 'Tires'=>100, 'Oil'=>10, 'Spark Plugs'=>4);asort($prices); // valueksort($prices); // key |
asort()는 값(value)을 기준으로 배열을 정렬하고 ksort()는 키(key)를 기준으로 배열을 정렬한다.
역순 정렬은 아주 간단하다. sort앞에 r만 붙여주면 된다.
1 2 3 | rsort($array);arsort($array);krsort($array); |
1차원 배열은 알파벳 순서라든가 크기 순으로 정렬할 수 있었지만 다차원 배열에서는 배열 자체를 비교해야 하기 때문에 좀 더 복잡해진다.
1 2 3 4 | // 2차원 배열$products = array( array('TIR', 'Tires', 100), array('OIL', 'Oil', 10), array('SPK', 'Spark Plugs', 4) ); |
위의 배열을 어떻게 정렬해야 할까? 여러 가지 방법이 있겠지만 물품의 설명을 알파벳 순서로 정렬한다거나 가격을 기준으로 정렬하는 방법 등을 생각해 볼 수 있다. 어떤 쪽이든 usort() 함수를 사용하기 위해서 우리가 직접 비교 함수를 만들어 주어야 한다. 여기서는 두 번째 데이터(설명)을 기준으로 알파벳 순으로 정렬해 보겠다.
1 2 3 4 5 6 7 8 9 10 11 | function compare($x, $y) { if($x[1] == $y[1]) return 0; else if($x[1] < $y[1]) return -1; else return 1;}// 같으면 0, 작으면 -1, 크면 1을 리턴usort($products, 'compare'); |
1 2 3 4 5 6 7 8 9 10 11 | function reverse_compare($x, $y) { if($x[1] == $y[1]) return 0; else if($x[1] < $y[1]) return 1; else return -1;}// 같으면 0, 작으면 1, 크면 -1을 리턴(역순)usort($products, 'reverse_compare'); |
1 | shuffle($pictures); |
shuffle() 이름에서 알 수 있듯이 무작위로 섞어주는 함수이다.
1 2 | $numbers = range(1, 10);$numbers = array_reverse($numbers); |
each(), current(), reset(), end(), next(), pos(), prev()
array_walk()
count(), sizeof(), array_count_values()
extract()
Designed by sketchbooks.co.kr / sketchbook5 board skin
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5
Sketchbook5, 스케치북5