[PHP] 다차원 배열 값으로 키 값 뽑아내기 - array_column / array_search

2022. 9. 21. 16:35기술집/WEB관련

728x90

 

이번에 작업하던것 중에... 예전 초반 작업때 어떻게 했던건데 지금 보니까 없어서 다시 만들었습니다.

국가 랭킹을 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
key key key
value value value

value 
key key key
value 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의 찾을 대상 배열을 만든 다음에 넣는게 아니라... 바로 안에서 만들어 버립니다.

퓨... 오늘도 공부 하나 했고, 담번에 다차원 배열 검색하는거 까먹으면 제 블로그에서 찾아 쓸수있겠네요 ㅎㅎㅎ

이미 제가 메모로 남겨둔걸 두세개는 잘 찾아쓰고있습니다 ㅋㅋㅋㅋ

이 맛에 시간들여가며 글 쓰는거 아니겠습니까 ㅋㅋㅋㅋ

 

728x90