[PHP] 관련성이 있는 값을 구분자를 이용하여 배열로 변환하기
이번 포스팅은 제목을 쓰는 게 좀 어렵다. 구분자로 구분된 텍스트를 배열로 저장하는 것인데 예를 들어 설명하는 게 제일 좋을 것 같다. 우선 아래의 값을 보도록 하자.
모니터-22인치
모니터-23인치
모니터-27인치
키보드-일반키보드
키보드-기계식키보드
이 값들을 모니터 => 22인치, 23인치, 27인치 / 키보드 => 일반키보드, 기계식키보드 이런 식으로 구분을 해서 저장을 해야할 필요가 있는데 이 때 배열을 사용하면 편하게 접근할 수 있다.
우선 가정해야할 것이 위 값은 DB의 field 라는 필드에 저장되어 있는 값으로 쿼리를 이용해 가져오는 것이다.
<?php
$val_array = array();
for($i=0; $row=mysql_fetch_array($result); $i++) {
$val = explode('-', $row['field']);
if($val[0] && !array_key_exists($val[0], $val_array))
$val_array[$val[0]] = array();
if($val[1] && !in_array($val[1], $val_array[$val[0]]))
$val_array[$val[0]][] = $val[1];
}
?>
위 코드의 기능을 설명하면 우선 모니터와 키보드는 배열의 키로 사용된다. 그래서 $val_array 배열에 해당 키 값이 존재하지 않으면 해당 값을 키로 하는 배열을 선언하고 그 배열에 22인치 등의 값을 배열로 저장하는 것이다. 이렇게 배열로 저장해 두면 원래 값이 가졌던 관계를 유지할 수 있기 때문에 여러 가지로 사용될 수 있을 것이다.
덧, 물론 위에서 예로 든 값이 DB에 처음부터 구분되어 저장되어 있다면 이런 과정도 필요없을 것이다. 하지만 하나의 필드에 구분자를 이용해 저장되어 있다면 이 방법은 유용할 것이라 생각한다.