2012-08-09 2 views
0

비슷한 질문을했지만 아주 원하는 것을 찾지 못했습니다.배열과 같은 값을 .INI 파일에서 PHP 배열로 읽어들입니까? 예제 내부

각 줄에 기본 키/값 쌍이 포함 된 큰 INI 파일이 있습니다. 나는이 결과 배열로 INI를 넣어 parse_ini_string()를 사용하고

# Excerpt from INI file itself... 
CountryFlagsPackage=CountryFlags 
bAllowBinds=False 
bShowTime=False 
Records[0]=14.64 
Records[1]=16.33 
Records[2]=11.47 
Records[3]=13.26 
Records[4]=16.64 
Records[5]=19.34 

: 키의 제비는 기본적으로 아래의 발췌에서 살펴 보 겠지만 .INI 형식으로 저장 "배열"입니다 :

# Excerpt from print_r() after parse_ini_string() 
[CountryFlagsPackage] => CountryFlags 
[bAllowBinds] => False 
[bShowTime] => False 
[Records[0]] => 14.64 
[Records[1]] => 16.33 
[Records[2]] => 11.47 
[Records[3]] => 13.26 
[Records[4]] => 16.64 
[Records[5]] => 19.34 

내 질문은 : 모든 "레코드"항목을 하나의 PHP 배열로 그룹화하는 우아한 방법이 있습니까? 현재 - 위에서 보았 듯이 개별 배열 항목 일뿐입니다. 기본적으로, 나는 다차원이되기 위해 위의 배열을 찾고 있습니다.

array_keys()를 사용하여 "레코드"텍스트를 찾을 수는 있지만 그다지 우아하지 않거나 재사용 할 수는 없습니다.

편집 : 정규식을 사용하여 끝에 대괄호가있는 항목을 찾을 수 있다고 생각합니다. 더 나은 솔루션?

+0

이 전체의 INI 파일이나 그것의 한 부분입니다 :에

$file = parse_ini_string($ini); foreach ($file as $key => $value) { if (preg_match("/(\w+)\[\d+]/", $key, $matches)) { // "Array" style key/value $arrays[$matches[1]][] = $value; } else { // Standard key/value pair $arrays[$key] = $value; } } print_r($arrays); 

결과? 이것이 전체 파일이라고 가정 할 때 제안 된 솔루션에는 아무런 문제가 없습니다. –

+0

@BrianGlaz 그것은 아주 큰 파일의 일부분이므로 유연성을 원했던 것입니다. 나는 그것을 언급 했어야했다. 필자의 질문을 편집하여 PHP의 배열 에디션 버전이 아닌 실제 .INI 텍스트도 포함시킵니다. 감사. –

+0

필자는'parse_ini_string()'을 사용 해본 적이 없지만 문서에 따르면 두 번째 매개 변수로 'true'를 전달하면 다차원 배열을 반환한다고 가정합니다. 벌써 해봤 니? –

답변

0

나는이 작업을 수행 할 수있는 기본 방법이 의심, 그래서 여기에 내가 무슨 짓을했는지 :

Array 
(
    [CountryFlagsPackage] => CountryFlags 
    [bAllowBinds] => False 
    [bShowTime] => False 
    [Records] => Array 
     (
      [0] => 14.64 
      [1] => 16.33 
      [2] => 11.47 
      [3] => 13.26 
      [4] => 16.64 
      [5] => 19.34 
     ) 
) 
관련 문제