2014-12-15 2 views
0

나는 Transport for London에서받은 피드를 통과 시키려고 시도하면서 CSV-ish 형식을 우연히 발견했습니다. PHP를 사용하여 이것을 파싱하는 가장 좋은 방법은 무엇입니까?PHP를 사용하여 각 행을 대괄호로 묶은 CSV를 어떻게 파싱합니까?

http://countdown.api.tfl.gov.uk/interfaces/ura/instant_V1?circle=51.49288,-0.147425,100&ReturnList=StopPointName,EstimatedTime,StopID

[4,"1.0",1418639278611] 
[1,"Eccleston Bridge","35312",1418639472000] 
[1,"Eccleston Bridge","35312",1418639395000] 
[1,"Eccleston Bridge","35312",1418639397000] 
[1,"Eccleston Bridge","35312",1418639696000] 
[1,"Eccleston Bridge","35312",1418639742000] 
[1,"Eccleston Bridge","35312",1418639731000] 
[1,"Eccleston Bridge","35312",1418640051000] 
[1,"Eccleston Bridge","35312",1418639938000] 
... 

감사합니다. 개별적으로이 JSON과 같은 각 행으로

+1

는 지금까지 아무것도 시도 했습니까? [JSON] (http://php.net/manual/en/book.json.php) – Alex

+3

[and]를 빈 문자 ""로 대체하는 방법은 무엇입니까? – Turcia

+0

방금 ​​시도한 역 이름 뒤에 ID를 가져 오려고했습니다. // 대괄호를 제거하는 식 $ contents = preg_replace ('/\[.*?\]/', 'contents, $ contents); // 줄 바꿈으로 분해합니다. $ Rows = str_getcsv ($ contents, "\ n"); // 두 번째 행을 분해하십시오 $ 값 \t = str_getcsv ($ Rows [1], ","); return $ Values ​​[2]; 빈칸이 있습니다. 아마도 내 preg_replace에 문제가 있습니까? – Mike

답변

2

, 여기 json_decode()을 사용할 수

// input as string 
$input = '....'; 

// split by lines 
$lines = explode("\n", $input); 

// walk through results 
for($i=0; $i<count($lines); $i++) { 

    // parse row 
    $row = json_decode($lines[i]); 

    // do something with it ... 

} 
+0

줄 단위로 파일을 읽으십시오 ... 전체 파일을 읽고 각 줄에 액세스하기 위해 분할 할 이유가 없습니다. –

+0

@Sirko이 경우에는 'foreach'를 제안합니다. – Alex

+0

@VitorLima OP가 입력을 얻는 방법에 따라 다릅니다. 이것이 파일이라는 것은 어디에도 없습니다. – Sirko

0

이 별도로 각 행을 분석 한 후 각 라인

$file = file('http://countdown.api.tfl.gov.uk/interfaces/ura/instant_V1?circle=51.49288,-0.147425,100&ReturnList=StopPointName,EstimatedTime,StopID'); 

array_walk($file, function(&$line) { 
    $line = json_decode($line); 
    if (count($line) == 3) { 
     $line = array_combine(array('id', 'count', 'timestamp'), $line); 
    } else { 
     $line = array_combine(array('id', 'station_name', 'station_id', 'timestamp'), $line); 
    } 
}); 

print_r($file); 
1

당신에게 연관 배열을 줄 것이다 문자열은 substr()을 사용하여 대괄호를자를 수 있습니다. 예를 들어

:

echo substr("1418639472000]",0,-1); 
> 1418639472000 

echo substr("[1234",1); 
> 1234 
관련 문제