[PHP] 배열 다시 인덱싱 하기 feat. array_values
예전에 배열에 중복된 값이 있을 경우에 array_unique
라는 함수를 이용해 중복된 값을 제거 할 수 있다고 포스트를 남겨 두었었는데요.
[PHP] 배열의 중복 값 제거하기 feat. array_unique
이 array_unique
함수를 사용하면서 문제점이 하나 발생했어요.
문제 상황
이런 상황을 가정 해볼께요. 아래처럼 배열에 연도 데이터를 여러개 담아 놓았다고 해봅시다.
$arr = ( 2022, 2022, 2023, 2023, 2024, 2025 );
근데 이 배열이란게 순서가 있다 보니까 원래대로라면 아래와 같이 그 순서도 같이 저장되어 있어요.
$arr = ( [0] => 2022, [1] => 2022, [2] => 2023, [3] => 2023, [4] => 2024, [5] => 2025 );
이런 상황에서 $arr
을 array_unique
를 이용해 중복된 값을 제거하면?
$arr = ( [0] => 2022, [2] => 2023, [4] => 2024, [5] => 2025 );
이렇게 됩니다.. 앞에 순서가 조금 엉망이지만.. 그래도 중복 값 제거는 잘 됩니다.
그런데 한가지 문제가 발생해요. 배열 $arr
을 foreach
에 넣으면 바로 오류 메시지를 뿜어 냅니다. 앞에 순서가 엉망이라서 그런거에요.
해결방법
위 문제의 원인을 해결하는 방법은 아주 간단합니다. 배열에 있는 4개 항목의 순서를 다시 0~3 까지 정의 해주면 돼요. 이때 사용하는 함수가 바로 array_values
입니다.
$arr = array_unique( $arr ); // 중복 값 제거 $arr = array_values( $arr ); // 배열 값 다시 인덱싱 하기
위와 같이 배열을 마사지를 좀 해주면,
$arr = ( [0] => 2022, [1] => 2023, [2] => 2024, [3] => 2025 );
이렇게 다시 인덱싱 되면서 foreach
문을 사용하는데도 문제가 없어집니다.
array_values
원래 array_values
함수는 key
와 value
로 만들어진 배열에서 값들만 골라네 반환해주는 일을 하는데요.
$arr = array( 'apple' => 'red', 'banana' => 'yellow' ); $arr = array_values( $arr ); // 결과 $arr = array( [0] => 'red', [1] => 'yellow' );
위와 같이 key
를 무시하고 value
들로 다시 배열을 만드는 것입니다.
위 예에서 key
는 (망가져버린) 순서이고, 각 연도가 value
니까 그 value
들을 다시 반환해주면 순서가 착착 맞게 배열이 다시 생성되겠죠? 이 기능을 이용해 배열을 마치 다시 인덱싱 한 것과 같은 효과를 내는 것입니다.
array_unique
를 이용하고나서 필요에 따라 array_values
를 적절하게 이용하도록 합시다.
끝.
링크
- array_values, PHP.net
댓글 남기기