PHP
2015.10.28 10:58

php 배열 사용하기

조회 수 12265 댓글 0
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print
?

단축키

Prev이전 문서

Next다음 문서

+ - Up Down Comment Print

출처 : 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] 처럼 접근한다.

range()함수는 일정한 범위를 반환하는 함수이다. 첫 번째 인자에 시작 값, 두 번째 인자에 마지막 값을 입력하면 범위의 모든 값으로 배열을 반환한다. 세 번째 인자는 옵션인데 증가량을 표현할 수 있다. 만약 -1을 입력하면 감소하는 배열을 만들 수 있다.

 

연관 배열

현대 프로그래밍 언어들은 연관 배열을 지원하는 경우도 흔히 볼 수 있다. 연관 배열은 인덱스를 문자열로 사용하여 그 값에 의미를 붙여 사용하는 방식이다.

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문과 같은 방법을 사용한다.

 

루프로 접근하기

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 문의 사용법은 위와 같다. 단, 연관 배열도 숫자 인덱스 배열 방식처럼 사용하면 값만 가져와 사용할 수도 있다.

 

each()와 list()

여기서 $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에 저장된다.

한 스크립트 내에서 배열을 두 번 이상 탐색해야 한다면, reset() 함수를 사용해야 한다. reset() 함수는 배열의 처음을 가리키도록 하는 함수이며 each()를 사용하면 배열을 가리키는 위치가 계속 바뀌게 되므로 나중에 처음부터 다시 탐색할 일이 생긴다면 reset()함수를 사용해야 한다.
(참고) 배열 연산자는 1장 PHP 훑어보기(1) 의 연산자 부분에 설명되어 있다. 

 

다차원 배열

언뜻 보면 복잡하지만 역시 타 언어와 다른 점이 크게 없으므로 간략하게 코드만 보고 넘어간다.

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
)
);
// 출력 1
for($row=0, $row<3; $row++) {
echo '|'.$products[$row]['Code'];
echo '|'.$products[$row]['Description'];
echo '|'.$products[$row]['Price'].'|<br />';
}
// 출력 2
for($row=0; $row<3; $row++) {
while(list($key, $value) = each($products[$row])) {
echo "|$value";
}
echo '|<br />';
}

3차원 이상의 배열도 같은 방식으로 array를 겹쳐주면 된다.(생략)

 

배열 정렬하기

sort() 

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, 100
sort($prices, SORT_STRING); // 10, 100, 4

sort()는 알파벳이나 크기순으로 배열을 정렬한다.

sort()의 두 번째 인자 값(문자열이나 숫자를 포함하고 있을 때 사용)

  • SORT_REGULAR : 기본값
  • SORT_NUMERIC : 숫자 크기 기준 정렬
  • SORT_STRING : 문자 기준 정렬

 

asort(), ksort()

1
2
3
4
5
6
7
$prices = array(
'Tires'=>100,
'Oil'=>10,
'Spark Plugs'=>4
);
asort($prices); // value
ksort($prices); // key

asort()는 값(value)을 기준으로 배열을 정렬하고 ksort()는 키(key)를 기준으로 배열을 정렬한다.

 

역순으로 정렬

역순 정렬은 아주 간단하다. sort앞에 r만 붙여주면 된다.

1
2
3
rsort($array);
arsort($array);
krsort($array);

 

다차원 배열 정렬하기

1차원 배열은 알파벳 순서라든가 크기 순으로 정렬할 수 있었지만 다차원 배열에서는 배열 자체를 비교해야 하기 때문에 좀 더 복잡해진다.

사용자 정의 정렬 usort()

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');

 

배열 재배치

shuffle()

1
shuffle($pictures);

shuffle() 이름에서 알 수 있듯이 무작위로 섞어주는 함수이다.

 

array_reverse()

1
2
$numbers = range(1, 10);
$numbers = array_reverse($numbers);
array_reverse() 함수는 인자로 받은 배열을 정렬시키는 것이 아닌, 정렬된 새로운 배열을 반환하는 함수이다. 만약 굳이 새로운 배열을 만들 필요가 없는 경우라면 예제처럼 원래의 배열에 다시 대입해 사용하면 된다.

 

기타 배열 관련 함수(미완성)

배열 탐색 함수

each(), current(), reset(), end(), next(), pos(), prev()

배열의 각 요소에 함수 적용하기

array_walk()

배열의 수 세기

count(), sizeof(), array_count_values()

배열을 스칼라 변수로 변환

extract()

(참고) array_push($array, $value), array_pop($array), explode($seperator, $string, $limit)
array_push : 배열에 요소 추가
array_pop : 배열의 마지막 요소를 제거하고 그 값을 리턴
explode : 문자열을 seperator로 자르고 각 요소를 배열로 리턴, limit은 리턴하는 수를 제한할때 옵션으로 사용

Dreamy의 코드 스크랩

내가 모으고 내가 보는

List of Articles
번호 분류 제목 날짜 조회 수 추천 수
17 PHP php 기본 문법 정리 secret 2014.01.16 0 0
16 PHP MySQL 기본 문법 2014.03.01 12444 0
15 PHP move_uploaded_file() 2014.04.29 10334 0
14 PHP Header for XML content in PHP file 2014.06.02 11262 0
13 PHP GD 라이브러리 간단 2014.07.09 9296 0
12 PHP PHP GD 설명 2014.07.09 10032 0
11 PHP GD 및 이미지 함수 정리 2014.07.09 12678 0
10 PHP Simple GD example 2014.07.10 7737 0
9 PHP PHP 문자열 다루기 2015.06.30 24697 0
8 PHP 파일 데이터 저장하고 불러오기(파일 입출력) 2015.09.30 8386 0
» PHP php 배열 사용하기 2015.10.28 12265 0
6 PHP 윈도우용 센드메일 구축 2016.03.30 8281 0
5 PHP SQL 일정 시간단위로 데이터 검색하기 2020.02.12 4916 0
4 PHP [PHP] .php 확장자 없이 URL 접속하기 2020.10.26 4465 0
3 PHP SQL :: EXIST , NOT EXIST 2022.09.05 1313 0
목록
Board Pagination ‹ Prev 1 2 Next ›
/ 2

나눔글꼴 설치 안내


이 PC에는 나눔글꼴이 설치되어 있지 않습니다.

이 사이트를 나눔글꼴로 보기 위해서는
나눔글꼴을 설치해야 합니다.

설치 취소

Designed by sketchbooks.co.kr / sketchbook5 board skin

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5

Sketchbook5, 스케치북5