2022. 9. 21. 16:35ㆍ기술집/WEB관련
이번에 작업하던것 중에... 예전 초반 작업때 어떻게 했던건데 지금 보니까 없어서 다시 만들었습니다.
국가 랭킹을 1~10위까지 뽑아서 보여주는데 내가 검색 한 국가가 10위권 안에 없을때
마지막에 몇위인지 따로 보여주는건데요...
분명 예전에 만들었는데..왜 없지 ;;;;;;
방법은 여러가지 있을겁니다.
제 모자란 머리로 생각한 방식이니 더 간단하고 편하게 할수있는 방법이 있으면 댓글로 알려주세요 ㅠㅠ
일단 PHP 함수에는 배열에서 이것저것 뽑아내기 위한 함수들이 있습니다.
이번에 사용한 것은 array_column 과 array_search 입니다.
일차원 배열의 경우에는 그냥 array_search로 간단히 끝낼수있지만..
저는 다차원 배열입니다. 간단히 안끝납니다 ;;;
예전에는.. array_search로 검색이 가능하게 배열을 다시 만들어서 검색한 키 값을 썼었는데..
저걸 다시 만들기보다 다른 방법이 없나 고민에 고민을 했습니다.
결국 저는 array_column 으로 검색할 값의 키,데이터를 뽑은다음에 array_search로 최종적으로 키 값을 가져왔습니다.
말로하니 좀 어렵네요 ㅎㅎㅎ 제가 부족한게 너무 많아서 설명을 잘 못합니다 ㅠㅠ
차근차근 해보겠습니다.
우선... 배열.
1차원 배열은 간단하죠.
#array
key | key | key | key |
value | value | value | value |
이렇게 하나의 배열 공간안에 각 방이 나뉘어져있고, 각 방 마다 key-value 세트로 되어있습니다.
key는 방번호, value는 방 안에 들어있는 사람이라고 보면 됩니다.
array_search 같은경우에는 value를 기준으로 검색을 해서 있으면 key값을 돌려주고, 없으면 bool(false)를 돌려줍니다.
일차원 배열에서는 그냥 쓰면 됩니다.
하지만 저는 다차원 배열입니다.
#array
key | key | ||||||||||||
value
|
value
|
이렇게 되어있죠.
value 값으로 검색을 하려고해도, 그 value 값이 배열입니다.
그러니 검색이 안되는거죠.
예전에는 이걸 순서만 잘 바꿔주니까 다차원 배열안의 key 값의 순서대로 어찌저찌 검색이 되기도 했습니다.
이번에는 배열을 다시 만드는것도 귀찮고, 더 좋은게 있을거라고 생각했습니다.
우선 제가 하고싶은건 다음과 같습니다.
1. 세계 국가들 대상으로 1~10위 까지의 랭킹을 뽑는다.
2. 국가를 지정했다면 해당 국가를 빨간색으로 표시 해 준다.
3. 10위 안에 지정한 국가가 없다면 10위 다음에 랭킹과 함께 표시를 해 준다.
2번이야.. 그냥 하면 되는데.. 3번이 ;;
단순히 생각하면 11번째에다 검색 국가 데이터를 넣어주고, 그걸 기준으로 출력시에 가르면 되는데..
고정이 아니라서 검색 조건에 따라 10위까지 있을수도 있고, 없을수도 있습니다.
그렇게되면 11번째가 굳이 필요할까.. 그리고 랭킹으로 쓸 인덱스도 11이 되어버리고..
인덱스 값을 따로 주려니까 10위권 이내일경우를 대비해서 if 만 늘어가고..
안그래도 빠져가는 머리는 더 빠지려고 하고 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
일단. 전체 데이터를 뽑아봅니다.
잘 안보이지만.. 총 231개!!!!
거의 전세계급 입니다.
여기서 배열에는 다음과 같은 값이 들어있습니다.
[key]
[해당 데이터 년월] [국가 이름] [국가 코드]....
다차원 배열이고, key값이 231개가 있습니다. 0~230까지죠.
각 key아래에 데이터들이 있습니다.
국가 코드를 검색해서 해당 데이터의 key값을 뽑아내면 순위가 나옵니다.
왜 key 값이 순위냐면...
SQL 짤때 order로 정렬을 했기 때문이죠 ㅎㅎㅎㅎ
가장 높은 순위부터 들어와있으니.. key값이 곧 순위가 됩니다.
작업순서는 다음과 같습니다.
1. array_column을 이용해 국가 코드 key 값만 뽑아낸다.
2. array_search를 이용해 검색한 국가 코드에 일치하는 key 값을 뽑아낸다.
자. 그럼 array_column 을 사용해서 nc_code 라는 칼럼명만 뽑아냅니다.
뽑아내고 나면 데이터가 어떻게 나오냐면요...
요렇게 나옵니다. 잘 안보이죠.. ㅎㅎㅎ
[key]
[해당 데이터 년월] [국가 이름] [국가 코드]....
이렇게 되어있던 다차원 배열이..
[key] [국가 코드]
이렇게 일차원 배열이 됩니다.
key 값은 그대로 들고오면서 검색하려는 칼럼의 데이터가 들어있다면...
나머지는 array_search로 찾아주면 되겠죠?
요렇게.
제가 찾으려던 국가의 순위를 다차원 배열에서 뽑아 낼 수 있습니다.
넘나 작아서 안보이는거....
저는 TR. 튀르키예(터키) 를 검색했구요. key값이 50으로 잘 뽑았습니다.
그런데.. key는 0부터 시작이니.. 실제 순위는 51위가 되는거죠 ㅎㅎㅎ
아무튼.. 다차원 배열에서 어떤 값을 검색해서 키 값을 찾아내려고 하는데 생각대로 되지 않아서
고생을 좀 했고.. 원하는 결과는 뽑아 낼 수 있었습니다.
저처럼 부족한 사람은 두줄로 작성하지만.. 다른 능력자분들은 이걸 한줄로 줄여버리시더라구요.
$index = array_search( $code, array_column( $arr, 'nc_code' ) );
캬.. 저는 왜 이렇게 한줄로 만들 생각을 못한걸까요..
array_search의 찾을 대상 배열을 만든 다음에 넣는게 아니라... 바로 안에서 만들어 버립니다.
퓨... 오늘도 공부 하나 했고, 담번에 다차원 배열 검색하는거 까먹으면 제 블로그에서 찾아 쓸수있겠네요 ㅎㅎㅎ
이미 제가 메모로 남겨둔걸 두세개는 잘 찾아쓰고있습니다 ㅋㅋㅋㅋ
이 맛에 시간들여가며 글 쓰는거 아니겠습니까 ㅋㅋㅋㅋ
'기술집 > WEB관련' 카테고리의 다른 글
[WEB] Apache ECharts 라인 바 혼합차트 적용 - CDN 간단 세팅 (1) | 2022.09.23 |
---|---|
[PHP] array_push 자꾸 값을 덮어쓴다..?? 바보짓 그만하자. (1) | 2022.09.22 |
[SQL] mariaDB 테이블에 칼럼 추가 / 위치 변경 Mysql (1) | 2022.09.17 |
[SQL] on update CURRENT_TIMESTAMP 삭제 mariaDB mysql (0) | 2022.08.29 |
[Web] 되던가 말던가.. 안되다가 되는 이유는? Javascript, PHP 다 그럼.. (0) | 2022.08.11 |