php학습 #4 배열
2020. 12. 3. 15:51ㆍ개발&TIL/php
배열
- 연관된 값들의 집합
- 배열을 생성하고 각원소를 조작하는 방법
- for(), foreach()를 사용하여 배열 원소를 순회하는 방법
- 배열을 문자열, 문자열을 배열로 바꾸는 implode(), explode() 함수
- 배열의 정렬에 대한 방법
- 다차원 배열에 조작 방법
배열 기초
- 배열은 원소들로 이루어짐, 각 원소에는 키(key)와값(value)으로 지정
- 배열의 각 키는 오직 하나의 원소와 연결
- (참고) 스칼라는 숫자, 텍스트 조각, 참, 거짓과 같은 단일 값을 이르는 용어, 배열처럼
다양한 값을 담을 수 있는 복잡한 자료형은 스칼라가 아님
배열 생성
배열을 생성하려면 array() 라는 구조 사용
//ex) 배열 생성하기
$vegetables = array('corn' => '노랑',
'beet' => '빨강',
'carrot' => '주황');
$dinner = array(0 => '스위트콘과 아스파라거스',
1 => '레몬 치킨',
2 => '삶은 망태버섯');
$computers = array('nintendo-64' => '닌텐도',
2600 => '아타리',
'Saturn' => '세가');
array() 언어 구조는 대괄호 쌍으로 축약할 수 있는데, 이를 단축 배열 문법이라고 함
단축 배열 문법은 PHP 5.4에서 도입
//ex) 단축 배열 문법으로 배열 선언하기
$vegetables = ['corn' => '노랑', 'beet' => '빨강', 'carrot' => '주황'];
$dinner = [0 => '스위트콘과 아스파라거스',
1 => '레몬 치킨',
2 => '삶은 망태버섯'];
$computers = ['nintendo-64' => '닌텐도',
2600 => '아타리',
'Saturn' => '세가'];
//ex) 원소를 하나씩 생성
$vegetables['corn'] = '노랑';
$vegetables['beet'] = '빨강';
$vegetables['carrot'] = '주황';
$dinner[0] = '스위트콘과 아스파라거스';
$dinner[1] = '레몬 치킨';
$dinner[2] = '삶은 망태버섯';
$computers['nintendo-64'] = '닌텐도';
$computers['2600'] = '아타리';
$computers['Saturn'] = '세가';
숫자 키 배열
- 키/값 쌍을 모두 쓸 필요 없이 값만 나열하면 PHP는 각 값에 자동으로 숫자 키를 할당
- 키값은 0부터 시작해서 각 원소마다 1씩 증가
//ex) array()로 숫자 키 배열 생성
$dinner = array('스프', '김치찌개', '생선구이');
print "$dinner[0] 그리고 $dinner[2] 주세요.";
배열에 번호를 지정하지 않으면 순차적으로 증가시킨 번호가 지정됨
//ex) []로 배열 원소 추가하기
//$lunch[0] 지정
$lunch[] = '버섯';
//$lunch[1] 지정
$lunch[] = '사과';
배열 크기 구하기
- count()함수를 사용하여 배열의 원소를 구할 수 있음.
//ex) 배열의 크기 구하기
$dinner = [0 => '스위트콘과 아스파라거스',
1 => '레몬 치킨',
2 => '삶은 망태버섯'];
$dishes = count($dinner);
print "count: $dishes";
배열 원소 순회
- 배열의 각 원소를 순회하는 가장 손쉬운 방법은 foreach()를 이용하는 방법
//ex) foreach() 반복문
$meal = array('breakfast' => '후라이',
'lunch' => '김치찌개',
'dinner' => '삼겹살');
foreach ($meal as $key => $value) {
print "key: $key, value: $value";
}
배열 수정
//ex) foreach()로 배열 수정하기
$meal = array('breakfast' => 1,
'lunch' => 2,
'dinner' => 3);
//변경
foreach ($meal as $index => $price) {
$meal[$index] = $price * 2;
}
//출력
foreach ($meal as $index => $price) {
printf("%s 메뉴의 변경된 가격은 \$%.2f입니다.\n", $index, $price;
}
숫자 키 배열을 순회하는 동안 현재 원소가 무엇인지 알려면 foreach() 대신 for()를 사용
//ex) foreach() 숫자 키 배열 사용하기
$meal = array('후라이',
'김치찌개',
'삼겹살');
foreach ($meal as $value) {
print "메뉴: $value\n";
}
//ex) for() 숫자 키 배열 사용하기
$meal = array('후라이',
'김치찌개',
'삼겹살');
for ($i = 0, $cnt = count($meal); $i < $cnt; $i++) {
print "메뉴 $i: $meal[$i]\n";
}
array_key_exists() : 함수를 사용하면 특정 키에 지정된 원소가 있는지 확인하여 true/false 반환
in_array() : 함수를 이용하면 배열 원소 중에 특정 값이 있는지 확인하여 true/false 반환 (대소문자 구분)
array_search() : 함수를 이용하면 in_array()와 비슷하지만 함수의 키를 반환함.
unset() : 함수를 사용하여 원소를 제거 가능 (값이 아니라 해당 원소 자체를 제거)
//ex)
unset($meal['dreakfast']);
implode() : 함수를 사용하면 배열의 원소를 한번에 출력
//ex) implode()로 배열에서 문자열 생성하기
$dimsum = array('닭고기 번', '오리발 구이', '순무 케이크');
$menu = implode(', ', $dimsum);
print $menu;
//출력 결과
//닭고기 번, 오리발 구이, 순무 케이크
//ex) 구분자 없이 출력하기
$letters = array('A', 'B', 'C', 'D');
print implode('', $letters);
//출력 결과
//ABCD
explode() : 함수를 사용하면 문자열에서 구분자 인수를 찾아 배열 원소로 나눌수 있음.
//ex) explode()로 문자열에서 배열 생성하기
$fish = '농어, 잉어, 꼬치고기, 가자미';
$fish_list = explode(', ', $fish);
print "두 번째 물고기는 $fish_list[1]입니다.";
//result
//두 번째 물고기는 잉어입니다.
배열 정렬
- sort() : 함수는 원소의 값을 기준으로 배열을 오름차순 정렬, 정렬 후에는 배열의 키가 새로 지정되기 대문에
숫자 키 배열에만 사용 가능 - asort() : 함수는 원소의 값을 기준으로 연관 배열을 오름차순 정렬, 이 함수는 키와 값 쌍을 유지
- ksort() : 키를 기준으로 배열을 오름차순 정렬, 키/값 쌍을 유지하면서 키의 순서를 변경
- 내림차순 정렬 함수 : rsort(), arsort(), krsort() 키 또는 값을 내림차순으로 정렬, 상위 3개 함수와 각각 대응
//ex) sort()를 이용한 정렬
$dinner = array('Sweet Corn and aspragus',
'Lemon Chicken',
'Braised Bamboo Fungus');
//정렬 전
print "정렬 전 -\n";
foreach ($dinner as $key => $value) {
print "\$dinner: $key $value\n";
}
sort($dinner);
//정렬 후
print "정렬 후 -\n";
foreach ($dinner as $key => $value) {
print "\$dinner: $key $value\n";
}
//result
//정렬 전 -
//$dinner : 0 Sweet Corn and aspragus
//$dinner : 1 Lemon Chicken
//$dinner : 2 Braised Bamboo Fungus
//정렬 후 -
//$dinner : 0 Braised Bamboo Fungus
//$dinner : 1 Lemon Chicken
//$dinner : 2 Sweet Corn and aspragus
다차원 배열
- 배열의 각 단계는 차원(dimension) 이라고 부름
- 일차원 배열은 키가 한단계 존재
- 키가 둘이상인 배열을 다차원 배열이라고 부름
- 다차원 배열 역시 대괄호 문법으로 생성하거나 수정 가능
//ex) array()와 []로 다차원 배열 생성하기
$meal = array('breakfast' => ['호두 번', '커피'],
'lunch' => ['캐슈너트', '양송이버섯'],
'snack' => ['말린 오디', '게살 무침']);
$lunches = [['닭고기', '가지', '쌀'],
['소고기', '부추', '국수']
['가지', '두부']];
$flavors = array('Japanese' => array('hot' => '와사비',
'salty' => '간장 소스'),
'Chinese' => array('hot' => '머스터드',
'salty' => '허브 잎')
);
다차원 배열의 각 차원을 순회하려면 forearch()나 for()를 중첩해서 사용
//ex) foreach()로 다차원 배열 순회
$flavors = array('Japanese' => array('hot' => '와사비', 'salty' => '간장 소스'),
'Chinese' => array('hot' => '머스터드', 'salty' => '허브 잎')
);
foreach ($flavors as &culture => $culture_flavors) {
foreach ($culture_flavors as $flavor => $example) {
print "$culture $flavor 요리의 재료는 $example 입니다.\n";
}
}
728x90
'개발&TIL > php' 카테고리의 다른 글
php학습 #3 조건문, 연산자, 반복문 (0) | 2020.11.30 |
---|---|
php학습 #2 문자, 변수 (0) | 2020.11.23 |
php학습 #1 기초 (0) | 2020.11.18 |