이전 포스트에서 예고한 대로 이번엔 php의 배열과 관련된 내장 함수들을 알아보겠다.
이전 포스트
php의 배열
배열의 구조를 확인하는 함수 print_r()
print_r() 함수는 php에서 변수, 특히 배열Array이나 객체Object의 내부 구조와 값을 사람이 읽기 쉬운 형태로 출력하여 보여주는 디버깅 함수다.
<?php
$fruits = [
'a' => 'apple',
'b' => 'banana',
'c' => ['grape', 'shine muscat', 'melon']
];
echo '<pre>';
print_r($fruits);
echo '</pre>';
?>
Array
(
[a] => apple
[b] => banana
[c] => Array
(
[0] => grape
[1] => shine muscat
[2] => melon
)
)
print_r() 함수는 인수Argument로 배열을 넣으면 이렇게 배열의 구조를 사람이 눈으로 읽기 쉽게 출력해준다.
배열 안의 데이터 정렬, sort()와 rsort()
<?php
$numbers = [9, 6, 3, 4];
sort($numbers); // 오름차순으로 정렬
echo '<pre>';
print_r($numbers); // print_r 함수로 배열의 구조를 확인
echo '</pre>';
?>
Array
(
[0] => 3
[1] => 4
[2] => 6
[3] => 9
)
sort() 함수는 배열의 요소를 값을 기준으로 오름차순Ascending 정렬하는 php 내장 함수다.
정렬 후에는 배열의 기존 숫자 인덱스가 재설정된다.
<?php
$numbers = [9, 6, 3, 4];
rsort($numbers); // 내림차순으로 정렬
echo '<pre>';
print_r($numbers);
echo '</pre>';
?>
Array
(
[0] => 9
[1] => 6
[2] => 4
[3] => 3
)
배열의 데이터를 내림차순Descending으로 정렬할 때는 rsort() 함수를 사용한다.
연관 배열 안의 데이터 정렬
연관 배열을 정렬하는 함수에는 데이터를 기준으로 정렬하는 함수와 키Key를 기준으로 정렬하는 함수가 있다.
1. 데이터를 기준으로 정렬, asort()와 arsort()
<?php
$menu = [
'Latte' => '1,500',
'Americano' => '1,000',
'Cake' => '2,000'
];
asort($menu); // 데이터를 기준으로 오름차순 정렬
echo '<pre>';
print_r($menu);
echo '</pre>';
?>
Array
(
[Americano] => 1,000
[Latte] => 1,500
[Cake] => 2,000
)
연관 배열을 데이터를 기준으로 오름차순 정렬을 하고 싶을 때는 asort() 함수를 사용한다.
<?php
$menu = [
'Latte' => '1,500',
'Americano' => '1,000',
'Cake' => '2,000'
];
arsort($menu); // 데이터를 기준으로 내림차순 정렬
echo '<pre>';
print_r($menu);
echo '</pre>';
?>
Array
(
[Cake] => 2,000
[Latte] => 1,500
[Americano] => 1,000
)
연관 배열을 데이터를 기준으로 내림차순 정렬을 하고 싶을 때는 arsort() 함수를 사용한다.
2. Key를 기준으로 정렬, ksort()와 krsort()
<?php
$menu = [
'Latte' => '1,500',
'Americano' => '1,000',
'Cake' => '2,000'
];
ksort($menu); // Key를 기준으로 오름차순 정렬
echo '<pre>';
print_r($menu);
echo '</pre>';
?>
Array
(
[Americano] => 1,000
[Cake] => 2,000
[Latte] => 1,500
)
연관 배열을 키Key를 기준으로 오름차순 정렬을 하고 싶을 때는 ksort() 함수를 사용한다.
<?php
$menu = [
'Latte' => '1,500',
'Americano' => '1,000',
'Cake' => '2,000'
];
krsort($menu); // Key를 기준으로 내림차순 정렬
echo '<pre>';
print_r($menu);
echo '</pre>';
?>
Array
(
[Latte] => 1,500
[Cake] => 2,000
[Americano] => 1,000
)
연관 배열을 키Key를 기준으로 내림차순 정렬을 하고 싶을 때는 krsort() 함수를 사용한다.
배열 끝에 데이터 추가 array_push()
<?php
$members = ['mystee', 'Mohini', 'Senri'];
$newMember = 'hyde';
// array_push($배열, '추가할 데이터' 또는 $변수);
array_push($members, $newMember, 'Ken');
echo '<pre>';
print_r($members);
echo '</pre>';
?>
Array
(
[0] => mystee
[1] => Mohini
[2] => Senri
[3] => hyde
[4] => Ken
)
array_push() 함수를 사용하면 배열의 끝에 하나 이상의 데이터를 추가할 수 있다.
<?php
$members = ['mystee', 'Mohini', 'Senri'];
// 이렇게 추가도 가능
$members[] = 'hyde';
$members[] = 'Ken';
echo '<pre>';
print_r($members);
echo '</pre>';
?>
이렇게 추가하는 방법도 있다.
하나의 데이터만 추가하는 경우라면 이 코드가 더 효율적이다.
그런데 array_push() 함수는 한번에 여러 개의 문자열이나 변수를 ,로 구분해서 넣을 수가 있다.
상황에 따라서 더 효율적인 코드를 쓰는 것이 좋을 것 같다.
배열 끝의 데이터 삭제 array_pop()
<?php
$members = ['mystee', 'Mohini', 'Senri', 'hyde', 'Ken'];
$leaveMember = array_pop($members);
echo '<pre>';
print_r($members);
echo '</pre>';
echo $leaveMember;
?>
Array
(
[0] => mystee
[1] => Mohini
[2] => Senri
[3] => hyde
)
Ken
array_pop() 함수는 배열의 마지막 데이터를 삭제할 때에 사용한다.
그런데 단순히 삭제만 하는 것이 아니라 위의 코드처럼 마지막 데이터를 꺼내서 변수에 넣을 수도 있다.
배열 앞의 데이터 추가와 삭제, array_unshift()와 array_shift()
위에서 설명한 array_push()와 array_pop()과 거의 비슷하니까 코드는 생략하겠다.
array_push()와 array_pop()은 배열의 끝에 데이터를 추가하거나 삭제했지만, array_unshift()와 array_shift()는 배열의 앞에 데이터를 추가하거나 삭제한다.
array_unshift(): 배열의 가장 앞쪽(시작)에 새로운 데이터를 추가하는 php 내장 함수다.
이 함수는 기존 요소들의 모든 숫자 인덱스를 한 칸씩 뒤로 밀어 재조정한다.array_shift(): 배열의 가장 앞쪽에 있는 데이터를 제거하고, 그 제거된 요소를 반환하는 php 내장 함수다.
이 함수 역시 남아있는 요소들의 숫자 인덱스를 재조정한다.
배열의 결합 array_merge()
<?php
$menu1 = ['Latte', 'Americano', 'Cake'];
$menu2 = ['Latte', 'Ice Cream'];
$newMenu = array_merge($menu1, $menu2);
echo '<pre>';
print_r($newMenu);
echo '</pre>';
?>
Array
(
[0] => Latte
[1] => Americano
[2] => Cake
[3] => Latte
[4] => Ice Cream
)
array_merge() 함수를 사용하면 하나 이상의 배열을 결합하여 새로운 배열을 만들 수 있다.
일단 위의 코드를 살펴보면 두 개의 배열에 중복되는 데이터(Latte)가 있지만 그냥 중복된 채로 합쳐지는 것을 볼 수 있다.
<?php
$menu1 = [
'Latte' => '2,000',
'Americano' => '1,000',
'Cake' => '2,000'
];
$menu2 = [
'Latte' => '1,500',
'Ice Cream' => '1,800'
];
$newMenu = array_merge($menu1, $menu2);
echo '<pre>';
print_r($newMenu);
echo '</pre>';
?>
Array
(
[Latte] => 1,500
[Americano] => 1,000
[Cake] => 2,000
[Ice Cream] => 1,800
)
이렇게 연관 배열에도 array_merge() 함수를 사용할 수 있다.
연관 배열에는 두 개의 배열에 Key가 같은 데이터가 있다면, 나중에 들어온 데이터가 원래 있던 데이터를 덮어쓴다.
배열끼리 중복된 값을 제거 array_diff()
<?php
$menu1 = ['Latte', 'Americano', 'Cake'];
$menu2 = ['Latte', 'Ice Cream'];
$newMenu = array_diff($menu1, $menu2);
echo '<pre>';
print_r($newMenu);
echo '</pre>';
?>
Array
(
[1] => Americano
[2] => Cake
)
array_diff() 함수는 두 배열의 차이를 비교하여 첫 번째 배열에는 있지만 두 번째 배열에는 없는 요소만 반환한다.
좀 더 쉽게 설명하자면, 첫 번째 배열에 있는 값에서 두 번째 배열에도 중복된 값이 있다면 제거하는 것이다.
필터링 후 배열의 요소들의 숫자 인덱스는 그대로 유지된다
$newMenu = array_values($newMenu);
만약 필터링 후 인덱스를 0부터 순차적으로 재설정하고 싶다면, 마지막에 array_values() 함수를 적용해 주면 된다.
array_values() 함수는 배열의 값(Value)들만 추출하여 새로운 정수 인덱스(0, 1, 2...)로 재설정된 배열을 반환하는 함수다.
오늘의 포스트는 유난히 길었다.
여기서 설명하지 않은 배열을 자르는 array_slice() 함수도 있지만, 설명하기 복잡하기도 하고, 글이 이미 너무 길어졌으니 여기서 줄이겠다.
혹시 배열을 자르는 기능이 필요하면 따로 찾아보는 것으로..
다음 포스트
php의 조건문과 반복문의 활용 (feat. scandir과 count 함수)
응원이나 피드백이 담긴 댓글은 제가 계속 블로그를 해나갈 수 있는 원동력이 됩니다. 😊
지인에게 보여주고 싶은 글이었다면 URL을 복사해서 메신저나 소셜 미디어에 공유해 주세요.

0 Comments
댓글 쓰기
🔸 댓글은 블로그 운영자의 승인 후에 블로그에 표시됩니다.
🔸 비로그인 방문자 분께서는 '익명'보다 이름/URL로 댓글을 남겨주시면 감사하겠습니다. (URL은 생략 가능합니다.)
🔸 구글 로그인 방문자는 '알림 사용'에 체크를 하시면, 남겨주신 댓글에 대한 답글 알림을 메일로 받아볼 수 있습니다. 📩