2013-04-24 91 views
2

我有一個PHP的str_getcsv函數的問題。str_getcsv沒有正確解析數據

我有這樣的代碼:

<?php 
$string = '#EXT-X-STREAM-INF:PROGRAM-ID=1,BANDWIDTH=714000,RESOLUTION=640x480,CODECS="avc1.77.30, mp4a.40.34"'; 

$array = str_getcsv($string, ",", '"'); 

print_r($array); 

應返回:

Array 
(
    [0] => #EXT-X-STREAM-INF:PROGRAM-ID=1 
    [1] => BANDWIDTH=714000 
    [2] => RESOLUTION=640x480 
    [3] => CODECS=avc1.77.30, mp4a.40.34 
) 

但是,相反,它返回:

Array 
(
    [0] => #EXT-X-STREAM-INF:PROGRAM-ID=1 
    [1] => BANDWIDTH=714000 
    [2] => RESOLUTION=640x480 
    [3] => CODECS="avc1.77.30 
    [4] => mp4a.40.34" 
) 

因爲它忽略了最後的外殼參數:CODECS,並且還在分割該信息。我正在使用str_getcsv,而不是僅僅因爲這個原因而爆炸(「,」,$ string)(該函數應該尊重機箱),但它的工作原理與爆炸一樣。正在執行

的代碼:http://eval.in/17471

回答

3

外殼(第三)參數不具有相當這種效果。外殼字符只有當它出現在分隔符旁邊時纔會這樣處理。

爲了讓您所需的輸出,輸入將需要

#EXT-X-STREAM-INF:PROGRAM-ID=1,...,"CODECS=avc1.77.30, mp4a.40.34" 

See it in action

+0

謝謝你的回答。我正在從m3u8文件接收這些信息。是否有任何簡單的方法來獲取我想要的信息? – Cito 2013-04-24 14:54:56

+3

@AbrahamSustaita:'str_replace('CODECS ='','「CODECS =',$ line)'會讓你提早回家。不純粹地獄,但你不能與實用性爭論。 – Jon 2013-04-24 14:59:10