PHP 배열 사용법, php배열 다루기
PHP 변수명
스칼라 변수 : 하나의 변수에 하나의 값만 있을 수 있다.
배열 변수 : 연관된 값들의 집합이다.
PHP 배열 사용법
배열을 생성하려면 array() 라는 언어 구조를 사용한다. 키와 값으로 배열의 데이터가 정해져 있으며, 배열의 목록을 쉼표로 구분한다. 배열의 키와 값은 => 으로 구분된다.
arr 배열을 순차 배열 또는 인덱스 배열이라고 부른다. 0 부터 +1 의 숫자가 더해지면서 데이터를 저장하는 방식이다. arr2 배열은 연관 배열이라고 부른다. 데이터의 위치만이 아닌 키와 값이 관계를 맺는 다는 의미이다.
$arr = array('1', '2', '3');
$arr2 = array('b'=>'blue', 'r'=>'red');
PHP 5.4 이후 변경된 배열 선언 방법
5.4에서 도입된 배열 선언 방법은 array() 를 [] 대괄호 쌍으로 축약하는 방법이다.
$arr = ['1', '2', '3'];
$arr2 = ['b'=>'blue', 'r'=>'red'];
PHP 배열 크기 구하기 count() 함수
count() 함수를 사용하여 배열의 원소가 몇 개인지 알 수 있다.
$val = count($arr);
PHP 배열의 데이터를 순회하는 방법
배열의 각 데이터를 순회 ( 돌리는 ) 방법 중 가장 손쉬운 방법은 foreach() 를 사용하는 것이다. 배열의 각 원소마다 코드 블록을 한 번씩 수행한다. foreach 구문 안에서 $value 의 값 변동은 실제 배열의 값과 상이하다. 배열내의 값을 바꾸기 위해서는 배열에 직접 접근해야한다.
Ex ) $meal[$key]++; (O)
$value++; (X)
<?php
print "array와 foreach.<br>";
$row_styles = ['even','odd'];
$style_index = 0;
$meal = ['breakfast'=>'호두 번',
'lunch'=>'캐슈너트',
'snack'=>'오디',
'dinner'=>'칠리가지'];
echo "<table>";
foreach($meal as $key => $value){
echo '<tr class="' . $row_styles[$style_index] . '">';
echo "<td>$key</td><td>$value</td></tr>\n";
$style_index = 1 - $style_index;
}
echo "</table>";
?>
array_key_exists()란?
array_key_exists : 특정 키에 지정된 원소가 있는지 확인하는 함수이다.
if(array_key_exists('breakfast',$meals){
// meals 배열에 breakfast 이라는 키에 지정된 원소 확인
}
in_array()란?
in_array : 배열 원소 중 특정 값이 있는지 확인하는 함수이다.
if(in_array('호두 번', $meals){
}
array_search()란?
array_search : in_array 와 유사하지만, true / false 를 반환하는 in_array 와 다르게 array_search 는 원소의 키를 반환한다.
$dish = array_search('호두 번', $meals);
배열에 문장 선언하기
배열의 키에 화이트스페이스 ( 띄어쓰기 ) 나 문장기호가 들어 갔을때는 중괄호를 이용해 삽입할 수 있다.
$meal['lunch desert'] = '밥';
echo "런치 디저트는 {$meal['lunch desert']}이다.";
unset()이란?
배열에서 원소를 제거하기 위해 사용한다.
unset($meals['오디']);
implode()란?
배열의 모든 원소를 한번에 출력할 때 사용한다.
$all = implode($meals, ', ');
echo $all;
explode()란?
implode 와 반대로 문자열을 조각내어 배열로 만들 때 사용한다.
$menu = explode($meals);
echo "1번 째 $menu[0]";
sort()란?
배열을 정렬하는 함수이다. 배열의 원소의 값을 기준으로 배열을 정렬하고 배열의 키가 새로 지정된다.
<?php
print "array와 foreach.<br>";
$row_styles = ['even','odd'];
$style_index = 0;
$meal = ['breakfast'=>'호두 번',
'lunch'=>'캐슈너트',
'snack'=>'오디',
'dinner'=>'칠리가지'];
sort($meal);
echo "<table>";
foreach($meal as $key => $value){
echo '<tr class="' . $row_styles[$style_index] . '">';
echo "<td>$key</td><td>$value</td></tr>\n";
$style_index = 1 - $style_index;
}
echo "</table>";
?>
breakfast , lunch, snack, dinner 라는 key 값들이 숫자로 수정되며, 정렬은 원소의 값으로 처리된다.
결과 값 :
0 오디
1 칠리가지
2 캐슈너트
3 호두 번
asort() 란?
key 값을 숫자로 바꾸지 않고 그대로 유지하려면 sort() 대신 asort() 를 사용하자.
<?php
print "array와 foreach.<br>";
$row_styles = ['even','odd'];
$style_index = 0;
$meal = ['breakfast'=>'호두 번',
'lunch'=>'캐슈너트',
'snack'=>'오디',
'dinner'=>'칠리가지'];
asort($meal);
echo "<table>";
foreach($meal as $key => $value){
echo '<tr class="' . $row_styles[$style_index] . '">';
echo "<td>$key</td><td>$value</td></tr>\n";
$style_index = 1 - $style_index;
}
echo "</table>";
?>
결과 값 :
snack 오디
dinner 칠리가지
lunch 캐슈너트
breakfast 호두 번
ksort() 란?
배열 원소의 값을 기준으로 정렬하지 않고 키를 기준으로 정렬한다. 키/값 을 유지하면서 순서를 변경한다.
<?php
print "array와 foreach.<br>";
$row_styles = ['even','odd'];
$style_index = 0;
$meal = ['breakfast'=>'호두 번',
'lunch'=>'캐슈너트',
'snack'=>'오디',
'dinner'=>'칠리가지'];
ksort($meal);
echo "<table>";
foreach($meal as $key => $value){
echo '<tr class="' . $row_styles[$style_index] . '">';
echo "<td>$key</td><td>$value</td></tr>\n";
$style_index = 1 - $style_index;
}
echo "</table>";
?>
결과 값 :
breakfast 호두 번
dinner 칠리가지
lunch 캐슈너트
snack 오디
rsort(), arsort(), krsort() 란?
sort() 는 오름차순, rsort() 는 내림차순이며 arsort() 는 asort() 의 내림차순, ksort() 의 내림차순은 krsort() 이다. sort 앞에 r 을 붙여주면 오름차순이 아니라 내림차순으로 정렬한다.
다차원 배열
PHP 에서도 다차원 배열을 선언할 수 있다. 배열 원소의 값에 다른 배열을 넣을 수 있기 때문에 다차원 배열 생성이 가능하다.
$lunches = [ ['닭고기','가지','쌀'],['소고기','부추','국수'],['가지','두부']];
foreach($lunches as $key => $value){
foreach($value as $key => $value2){
echo "$value2";
}
}
$meals = ['breakfast'=>['호두 번','커피'],'lunch'=>['캐슈너트','양송이버섯']];
foreach($meals as $breakfast => $value){
foreach($value as $key => $value2){
echo "$value2";
}
}
for 와 foreach 의 차이점
for 와 foreach 의 차이점은 배열 원소의 위치와 배열 원소의 값을 알아보는 것에서 차이가 난다. for 의 경우 배열안의 원소들의 인덱스 ( 위치 ) 를 순회하게 되고, foreach 는 배열 내의 원소들을 순회하게 된다.
for 문을 사용하면 배열의 값을 적접 제어하기 편하지만 조금 번거롭다. 반대로 foreach 는 간편하게 원소 값들을 출력할 수 있다. 하지만 원소의 위치를 알 수 있는 변수를 따로 마련해야 한다.
for($i = 0, $limit = count($meals); $i<$limit; $i++){
//출력하기
}