본문 바로가기

PRWS.kr

20191112

요즘 학원때문에 바빠갖고 포스팅을 종종 잊게 된다.

오랜만에 리뷰하는 기분으로 올려본다.

버튼이 위아래로 너무 짧다.

일단 잡기능부터 사용가능한 기능들만 남기고 싹 클리어시켰다.

그러나 수리해야할 기능이 태반...

오늘 우리가 관심(?)을 줘야 할 부분은 여기이다.

최근에 브라우저를 네이버 웨일로 갈아탔더니 확장 프로그램 중 학교급식이 있었다.

깃허브에 제작자가 뭘 올려놓았길래 PHP 코드 일부를 따와서 이렇게 만들어낼 수 있었다.

검색창에 학교이름의 일부 또는 전부를 치면 저렇게 나온다. 저기서 원하는 학교를 선택하면 된다.

동명의 학교가 존재할 것을 고려하여 주소까지 뜨도록 해놓았다. 그러나 교육청이나 학교코드같은건 쓸데없어 보여서...

저렇게 급식이 좌라락 뜬다.

급식 자체는 나이스에서 뜯어오는거라 어지간한 학교는 거의 다 된다.

그러나 대안학교 같은 경우는 뜨지 않는 경우가 대부분이다. 이는 해당 학교측에서 나이스에 급식정보를 올리지 않아서일 것이다.

날짜변경도 가능하다.

그러나 이런 것을 만드려면 API 자체가 중요한 것이 아니다.

배열(Array)의 형태로 존재하는 경우, json_encode(); 를 통하여 변환될 경우

{ "status": "200", "schools": [ { "name": "성남정자초등학교", "code": "J100004946", "office": "goe.go.kr", "level": 2, "address": "경기도 성남시 분당구 분당수서로 442" }, { "name": "정자초등학교", "code": "J100002501", "office": "goe.go.kr", "level": 2, "address": "경기도 수원시 장안구 장안로 191" }, { "name": "정자중학교", "code": "J100002202", "office": "goe.go.kr", "level": 3, "address": "경기도 성남시 분당구 황새울로 60" }, { "name": "삼정자초등학교", "code": "S100003293", "office": "gne.go.kr", "level": 2, "address": "경상남도 창원시 성산구 외리로34번길 8" }, { "name": "삼정자중학교", "code": "S100003406", "office": "gne.go.kr", "level": 3, "address": "경상남도 창원시 성산구 외리로34번길 32" } ] }

이런 식으로 뜬다. 위는 검색어 '정자' 를 입력했을 경우 표출되는 배열의 모습이다.

그러나 저것은 JSON 언어로 작성된 배열이라 PHP에서는 제대로 읽을 수가 없다.

그래서 저걸 나중에 변환해 줄거다.

우리가 저걸 위 사진처럼 텍스트만으로 표출하려면 일단 저 자료의 구조를 파악할 필요가 있다. 자료구조론?

일단 결과값 배열 안에 status와 schools 가 들어 있다.

그리고 schools 부분도 배열로 이루어져 있는데, 그 배열 안에는 각 학교의 정보가 하나의 중괄호{ } 로 묶여져 있는 형태이다.

우리는 '정자' 라는 이름을 포함한 학교들을 모두 불러오려 했기에 모든 학교의 정보가 묶여져 하나의 학교 단위로 압축되어 있는 단계까지만 배열을 파고 들어가면 된다.

그러니까 큰 array() 안의 schools() 내부에 있는 값들만 전부 표출시키도록 하면 되는 것이다.

그래서 학교들이 모여 있는 집합인 schools() 부분만 json_decode() 함수를 통해 다시 배열로 변환했다.

그다음 각 학교에 대한 값은 어떻게 가져오냐?

저 Schools 내의 배열(각 학교에 대한 것일 것이다.)이 표출될 때, Schools: [] 라는 대괄호 내부의 {} 중괄호들은 그 명칭이 정해지지 않았다. 그러니까 schools[ School: {array}, School2: {array2}] 와 같이 School, School2같은 꼬리표가 붙지 않았다는 것이다.

이럴 때는 저기에서 배열이 등장한 순서대로 0,1,2,3,4,5... 로 나온다.

근데 우리는 검색할 때 그 단어를 교명에 포함하고 있는 학교가 몇 개교나 되는지 알 수 없다.

우리가 검색 전에 '정자' 라는 단어가 포함된 학교 이름이 몇 개나 되는지 알 수 있는가?

그래서 우리는 일단 배열을 등장시키고, 그 수를 세 적절한 수 만큼만 배열이 나오게 할 것이다.

<?php ... for($x = 0; $x < count($s); $x++){ echo $s[$x]['name']; ... ?>

코드로 보면 바로 알게 될 것이다.

for문에서 미지수를 하나 잡고, 0에서 count보다 작은 수까지 1씩 증가하도록 되어 있는 상태이다.

for 문이 무한반복을 하는 코드이므로 저렇게 작성해두면 $x의 값이 count($schule) 의 값보다 작지 않을 때까지 계속 늘어나고, 그만큼 학교 이름도 더 작성되는 것이다.

그리고 그 학교 배열에서 하위 범주에 해당하는 'name' 을 불러오려면 저렇게 $배열[자료연번]['name'] 과 같이 써주면 된다.

'PRWS.kr' 카테고리의 다른 글

20200229  (0) 2020.05.27
20191112  (0) 2020.05.27
20190901  (0) 2020.05.27
20190503  (0) 2020.05.27
20190315  (0) 2020.05.27
20190313  (0) 2020.05.27