티스토리 뷰
echo '<pre>';
print_r($box_data);
echo '</pre>';
위의 결과가 아래와 같다.
Array
(
[0] => Array
(
[size] => 500*380
[sum] => 1
[cover] => 5
[fincover] => 2
[boxdirection] => 밑면
[boxfrontbottom] => 50
[boxrailwidth] => 70
[length] => Array
(
[0] => Array
(
[length] => 1219
[sum] => 1
)
[1] => Array
(
[length] => 2438
[sum] => 0
)
[2] => Array
(
[length] => 3000
[sum] => 0
)
[3] => Array
(
[length] => 3500
[sum] => 0
)
[4] => Array
(
[length] => 4000
[sum] => 0
)
[5] => Array
(
[length] => 4150
[sum] => 1
)
)
)
[1] => Array
(
[size] => 500*350
[sum] => 1
[cover] => 6
[fincover] => 2
[boxdirection] => 후면
[boxfrontbottom] => 50
[boxrailwidth] => 70
[length] => Array
(
[0] => Array
(
[length] => 1219
[sum] => 0
)
[1] => Array
(
[length] => 2438
[sum] => 1
)
[2] => Array
(
[length] => 3000
[sum] => 0
)
[3] => Array
(
[length] => 3500
[sum] => 0
)
[4] => Array
(
[length] => 4000
[sum] => 1
)
[5] => Array
(
[length] => 4150
[sum] => 0
)
)
)
[2] => Array
(
[size] => 550*450
[sum] => 1
[cover] => 6
[fincover] => 2
[boxdirection] => 양면
[boxfrontbottom] => 50
[boxrailwidth] => 70
[length] => Array
(
[0] => Array
(
[length] => 1219
[sum] => 0
)
[1] => Array
(
[length] => 2438
[sum] => 0
)
[2] => Array
(
[length] => 3000
[sum] => 0
)
[3] => Array
(
[length] => 3500
[sum] => 1
)
[4] => Array
(
[length] => 4000
[sum] => 1
)
[5] => Array
(
[length] => 4150
[sum] => 0
)
)
)
)
위의 결과에서 length의 sum이 0인 것은 제거하고 값이 있는 것만 남기려면?
length 배열에서 sum 값이 0인 항목을 제거하고, 값이 있는 항목만 유지하려면 array_filter를 사용할 수 있습니다. 아래는 해당 데이터를 처리하는 방법입니다.
수정된 코드
// length에서 sum이 0인 항목 제거
foreach ($box_data as $key => &$box) {
$box['length'] = array_filter($box['length'], function ($lengthItem) {
return $lengthItem['sum'] > 0; // sum 값이 0보다 큰 항목만 유지
});
}
// 결과 출력
echo '<pre>';
print_r($box_data);
echo '</pre>';
주요 변경점
- array_filter로 sum이 0인 항목 제거:
- array_filter는 배열의 각 항목에 대해 조건을 확인하고, 조건을 만족하는 항목만 반환합니다.
- return $lengthItem['sum'] > 0;는 sum이 0보다 큰 항목만 남기도록 합니다.
- 참조 사용:
- foreach ($box_data as $key => &$box)에서 &$box를 사용해 참조로 배열을 수정합니다.
수정 후 출력 결과
수정 후, length 배열에서 sum 값이 0인 항목이 제거됩니다. 예를 들어:
Array
(
[0] => Array
(
[size] => 500*380
[sum] => 1
[cover] => 5
[fincover] => 2
[boxdirection] => 밑면
[boxfrontbottom] => 50
[boxrailwidth] => 70
[length] => Array
(
[0] => Array
(
[length] => 1219
[sum] => 1
)
[5] => Array
(
[length] => 4150
[sum] => 1
)
)
)
[1] => Array
(
[size] => 500*350
[sum] => 1
[cover] => 6
[fincover] => 2
[boxdirection] => 후면
[boxfrontbottom] => 50
[boxrailwidth] => 70
[length] => Array
(
[1] => Array
(
[length] => 2438
[sum] => 1
)
[4] => Array
(
[length] => 4000
[sum] => 1
)
)
)
[2] => Array
(
[size] => 550*450
[sum] => 1
[cover] => 6
[fincover] => 2
[boxdirection] => 양면
[boxfrontbottom] => 50
[boxrailwidth] => 70
[length] => Array
(
[3] => Array
(
[length] => 3500
[sum] => 1
)
[4] => Array
(
[length] => 4000
[sum] => 1
)
)
)
)
결과 요약
- sum 값이 0인 항목이 length 배열에서 제거되었습니다.
- array_filter는 효율적이며, 데이터가 깔끔하게 정리되었습니다.
PHP 배열에서 조건에 따라 항목 제거하기: array_filter 활용법
PHP로 데이터를 처리하다 보면, 배열의 특정 조건에 맞지 않는 항목을 제거하고 싶을 때가 있습니다. 예를 들어, 셔터 박스 데이터에서 길이별 개수를 저장한 배열에서 개수가 0인 데이터를 제거하고 싶다고 해봅시다.
이번 글에서는 array_filter를 사용하여 이런 작업을 간단하게 처리하는 방법을 초보자도 이해하기 쉽게 설명하겠습니다.
문제 상황
초기 데이터 구조
아래와 같은 배열이 있다고 가정해봅시다. 각 박스 크기(size)마다 길이(length)별 개수가 저장되어 있습니다.
$box_data = [
[
'size' => '500*380',
'length' => [
['length' => '1219', 'sum' => 1],
['length' => '2438', 'sum' => 0],
['length' => '3000', 'sum' => 0],
['length' => '3500', 'sum' => 0],
['length' => '4000', 'sum' => 0],
['length' => '4150', 'sum' => 1],
]
],
[
'size' => '500*350',
'length' => [
['length' => '1219', 'sum' => 0],
['length' => '2438', 'sum' => 1],
['length' => '3000', 'sum' => 0],
['length' => '3500', 'sum' => 0],
['length' => '4000', 'sum' => 1],
['length' => '4150', 'sum' => 0],
]
]
];
여기서 sum 값이 0인 항목은 의미가 없으므로 제거하고 싶습니다. 최종적으로 length 배열에 sum이 0이 아닌 항목만 남기려 합니다.
해결 방법: array_filter 사용
PHP의 array_filter 함수는 배열의 각 항목에 대해 조건을 검사하고, 조건을 만족하는 항목만 새로운 배열로 반환합니다. 이를 사용하면 조건에 따라 배열의 데이터를 깔끔하게 정리할 수 있습니다.
코드 작성
아래 코드를 작성해봅시다.
Step 1: array_filter를 사용해 sum 값이 0인 항목 제거하기
foreach ($box_data as $key => &$box) {
// length 배열에서 sum이 0인 항목 제거
$box['length'] = array_filter($box['length'], function ($lengthItem) {
return $lengthItem['sum'] > 0; // sum 값이 0보다 큰 항목만 유지
});
}
- &$box: 배열을 참조로 가져옵니다. 이렇게 하면 원본 데이터를 직접 수정할 수 있습니다.
- array_filter: length 배열의 각 항목에 대해 조건을 검사합니다.
- 익명 함수: sum 값이 0보다 큰 항목만 남기도록 조건을 설정합니다.
Step 2: 결과 출력
결과를 확인하기 위해 print_r로 배열을 출력해봅시다.
echo '<pre>';
print_r($box_data);
echo '</pre>';
실행 결과
sum 값이 0인 항목이 제거된 결과는 아래와 같습니다.
Array
(
[0] => Array
(
[size] => 500*380
[length] => Array
(
[0] => Array
(
[length] => 1219
[sum] => 1
)
[5] => Array
(
[length] => 4150
[sum] => 1
)
)
)
[1] => Array
(
[size] => 500*350
[length] => Array
(
[1] => Array
(
[length] => 2438
[sum] => 1
)
[4] => Array
(
[length] => 4000
[sum] => 1
)
)
)
)
초보자도 이해할 수 있는 array_filter 작동 원리
- 배열 항목 반복
array_filter는 배열의 각 항목을 하나씩 가져옵니다. - 조건 확인
익명 함수(function ($lengthItem) { return $lengthItem['sum'] > 0; })에서 sum 값이 0보다 큰지 확인합니다. - 조건을 만족하는 항목만 반환
sum 값이 0보다 큰 항목만 결과 배열에 포함됩니다.
코드 전체 보기
아래는 최종 코드입니다.
<?php
foreach ($box_data as $key => &$box) {
// length 배열에서 sum이 0인 항목 제거
$box['length'] = array_filter($box['length'], function ($lengthItem) {
return $lengthItem['sum'] > 0; // sum 값이 0보다 큰 항목만 유지
});
}
// 결과 출력
echo '<pre>';
print_r($box_data);
echo '</pre>';
?>
마무리
이제 length 배열에서 sum 값이 0인 항목을 제거할 수 있습니다. 이 방법은 데이터 정리에 매우 유용하며, 조건에 따라 데이터를 필터링해야 하는 다양한 상황에서 활용할 수 있습니다.
array_filter는 PHP에서 데이터를 다룰 때 가장 유용한 함수 중 하나입니다. 이 글을 통해 array_filter의 기본적인 사용법과 배열 데이터를 효율적으로 정리하는 방법을 이해하셨길 바랍니다. 😊
추가 팁: 더 복잡한 조건이 필요하다면?
만약 더 복잡한 조건을 추가하고 싶다면, 익명 함수 안에 논리를 더 작성하면 됩니다. 예를 들어, sum 값이 5 이상인 항목만 남기고 싶다면:
return $lengthItem['sum'] >= 5;
이렇게 조건을 바꿔주기만 하면 됩니다! 🎉
'IT tech Coding > php' 카테고리의 다른 글
PHP에서 isset으로 Input Value 기본값 설정하기 (0) | 2024.12.11 |
---|---|
php 배열에서 특정 키를 기준으로 중복 제거하기 array_reduce , (0) | 2024.12.03 |
PHP에서 정규식을 사용하여 데이터 가공하기: 초보자를 위한 친절한 안내서 (0) | 2024.11.28 |
폴더의 오늘 이전 날짜의 JSON 파일을 삭제하는 PHP 코드 (0) | 2024.11.26 |
while($row = $stmh->fetch(PDO::FETCH_ASSOC)) { 이 코드가 두번째는 실행이 안되는 이유는? (0) | 2024.11.25 |
- Total
- Today
- Yesterday
- 엑셀보호
- 엑셀입력보호
- 코딩효율성
- 코딩튜토리얼
- 티스토리챌린지
- 스크립트작성기초
- 뫄프로그래밍
- #InstallForge
- json파일형태보기
- coalesce는 한국어로 "코얼레스크" 또는 "코얼리스"
- #파이썬패키징
- sql문장 날짜계산
- 프로그래머생활
- 테크에능한여성
- 오블완
- 오토핫키가이드
- 효율적코딩방법
- General error: 2031
- #NSIS
- Bootstrap 5
- 구글드라이브API
- #프로그램설치
- 엑셀셀보호
- #InnoSetup
- 파이썬코드줄바꿈방법
- chatGPT3.5파이썬버전
- json파일편하게보는법
- #독립실행파일
- isset을 적용해야 하는 이유
- ajax오류메시지
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 30 | 31 |