[php] 간단한 형식으로, 파일에서 array로 간편하게 옮기기.
글쓴이: lacovnk / 작성시간: 일, 2005/05/29 - 3:57오후
간단한 정보들을 파일에 저장하기 위해서 짜봤습니다;
#oneEntry index1 index2 data1 data2 ##wrongOneEntry index1 index2 data1 data2 ##listEntry index index1 index2 0 data1 data2 1 data1 data2
oneEntry와 lisdtEntry의 차이는, 여러개가 있느냐, 하나가 있느냐 입니다. 하나만 있을 것이라면 굳이 result[wrongEntry][0]으로 접근 할 필요가 없게 만들려고.. 구분하였습니다;
위 의 파일을 받아, print_r로 찍으면 다음과 같습니다.
Array
(
[oneEntry] => Array
(
[index1] => data1
[index2] => data2
)
[wrongOneEntry] => Array
(
[0] => Array
(
[index1] => data1
[index2] => data2
)
)
[listEntry] => Array
(
[0] => Array
(
[index] => 0
[index1] => data1
[index2] => data2
)
[1] => Array
(
[index] => 1
[index1] => data1
[index2] => data2
)
)
)code
function getInfoFile($fileName)
{
$bufFile = file($fileName);
$key = array();
$result = array();
foreach($bufFile as $cur)
{
$bufLine = explode("\t",$cur);
if($bufLine[0][0] == '#')
{
$count = 0;
for($i=1;$i<sizeof($bufLine);$i++){$key[$i-1] = trim($bufLine[$i]);}
if($bufLine[0][1] == '#')
{
$name = substr($bufLine[0],2);
$flag_multi = true;
}
else
{
$name = substr($bufLine[0],1);
$flag_multi = false;
}
}
else
{
if($flag_multi){for($i=0;$i<sizeof($key);$i++){$result[$name][$count][$key[$i]] = trim($bufLine[$i]);}}
else{for($i=0;$i<sizeof($key);$i++){$result[$name][$key[$i]] = trim($bufLine[$i]);}}
$count++;
}
}
return $result; }
거꾸로 array를 위와 같은 형식의 파일로 저장하고 싶은데.. 꽤 복합할 것 같네요 -_- 관심있으신분 도와주세요~~ :)
Forums:


손으로 직접 데이터를 작성하는거면 위의 코드가 효용성이 있을것 같지만,
손으로 직접 데이터를 작성하는거면 위의 코드가 효용성이 있을것 같지만,
php 가 코드를 뽑아내도록 할거면
serialize() 로 편하게 하는것을 추천합니다.
이철기
serialize하려면 웹 인터페이스를 구현해야하는데 귀찮고;
txt파일만 누군가가 upload해주면 내용을 생성해줘야 하기 때문에 위와 같은 파싱 루틴을 짰습니다 ㅎ
다음에 일일이 파싱하지 말고, serialize된 결과를 저장해서, 그걸 include하는 방식으로 번거롭지만 -_- 사용하고 있습니다 ㅎ
아, 정말 admin 인터페이스 구현해주기 귀찮아요 ㅠㅠ 차라리 제가 대신 해주는 것이 손이 덜 간다는 생각이 드네요;
웹 인터페이스를 구현해야 한다는 게 무슨 뜻인가요 ?_?저 내용은 s
웹 인터페이스를 구현해야 한다는 게 무슨 뜻인가요 ?_?
저 내용은 serialize로 다 구현될 것 같은데..
음...
예를 들어, 홈페이지에 들어갈 텍스트를 나라별로 구별하기 위해서 다음과 같은 내용이 필요하다 칩시다
이때 admin의 웹인터페이스가 필요합니다
이때, 위의 파일 업로드를 통해서 한다면
즉, serialize는 내부 구현의 문제입니다;; 그리고 serialize를 하려면 일단 php array로 있어야 하는 것 아닌가요? 그 array를 처음에 어떻게 생성하느냐.. 를 구현한 것이라고 보시면 되겠군요.
목적을 정확하게 안 적어놔서 혼란이 있는 것 같네요 ㅎ
[code:1]/// @brief 배열을 정해진 형식의 파일로 바꿈
/// @brief 배열을 정해진 형식의 파일로 바꿈 function func ($arr) { $content = ""; foreach ($arr as $key => $value) { $subarr_keys = array_keys($value); $subarr_values = array_values($value); if (array_key_exists(0, $value) and is_array($value[0])) { /// 첫번째 엔트리의 첫번째 값이 배열이면 $subArray = $value; $prefix = "##"; $indexes = array_keys($subArray[0]); $subItem = Array(); foreach ($subArray as $each) { $arr = Array(); foreach ($indexes as $index) { $arr[] = $each[$index]; } $subItem[] = implode (" ", $arr); } } else { /// 배열이 아니면 $prefix = "#"; $indexes = $subarr_keys; $subItem = Array(implode(" ", $subarr_values)); } $content .= sprintf("%s%s %s\r\n%s\r\n", $prefix, $key, implode(" ", $indexes), implode("\r\n", $subItem)); } return $content; }지저분하네요~ 되는거 확인하고 바로 ㅎㅎ
근데 문자에 빈칸이 들어가면 좀 난감할 것 같네요~
댓글 달기