묻고답하기
exec_json에서 배열의 숫자 키값 무시.(예: group_srl)
2014.12.17 21:04
어쩌다 exec_json으로 회원 정보를 불러 오는데, 해당 회원이 속한 그룹 정보도 불러 올 필요가 있었습니다.
그런데, 아무리 해도 group_srl 만 불러오질 못하는 것입니다.
원래 group_srl이
2=>'준회원', 3=>'정회원', 12=>'그회원'
이라고 했을 때,
DB에서 불러와 아래와 같이 작성하면
foreach($output->data as $val) {
$member_info->group_list[$val->group_srl] = $val->title;
}
아래와 같이 불러오겠지 했는데
stdClass Object
(
[group_list] => Array
(
[2] => 준회원
[3] => 정회원
[12] => 그회원
)
)
아래처럼 오더군요.
stdClass Object
(
[group_list] => Array
(
[0] => 준회원
[1] => 정회원
[2] => 그회원
)
)
단순히 그룹 목록 출력할 때는 상관 없지만,
group_srl이 필요할 때는 곤란합니다.
물론, 일반 php에서는 전혀 문제 없고요.
직접 DB에서 불러 오든, getMemberGroups를 쓰던, 뭘 쓰던 마찬가지입니다.
이래저래 삽질 끝에 group_srl을 따옴표로 묶어 연관배열로 처리하던가, object로 해서 따로 받으면 됐습니다.
(참고로, php 강제 형변환 (string)으로도 당연히 해결 안됩니다)
foreach($output->data as $val) {
$member_info->group_list["'".$val->group_srl."'"] = $val->title;
}
또는
foreach($output->data as $key => $val) {
$member_info->group_list[$key]->g_srl = $val->group_srl;
$member_info->group_list[$key]->title = $val->title;
}
결국 exec_json으로 가져오는 과정에서 배열의 숫자 키 값이 다시 인덱싱 되는 것입니다.
연관배열은 전혀 문제 없습니다.
제가 json을 잘 몰라서 그러는데, 원래 이런 건가요?
댓글 2
-
이즈야
2014.12.17 23:26
-
무얼까2
2014.12.18 00:18
아항. 자바스크립트에 그런 특징이 있다는걸 처음 알았습니다.
잘 안쓰는 함수라 array_flip을 살펴 봤습니다.
val 이 숫자만 있을 경우(2 또는 '2') 엔 마찬가지고(당연하겠지만), php의 자동 형변환 때문에 배열 원소 값 가운데 최소 하나는 문자(a-z가-힣ㄱ-ㅎ...)가 있어야 하는군요.
또한, 문자가 섞여 있다 하더라도, 숫자(또는 문자형 숫자)가 겹치는 경우엔 마지막 값만 적용 되고요.
하지만, XE 그룹명의 경우 중복되는 값은 저장되지 않으니 상관 없고, 만에 하나라도 그룹명을 전부 숫자로 입력한 경우만 주의하면 되겠네요.
php와 자바스크립트 배열 특징을 더 알게 됐습니다.
감사합니다.
늦은 밤 편안하십시오.
php array_flip 함수를 사용하여 키값과 밸류값을 뒤바꿔서 사용하세요.