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