我試圖將自定義格式的.txt文件轉換爲數組。解析數組的自定義格式
這裏是第一線的樣本:
[LINETYPE]S [STARTTIME]00:00:00
[LINETYPE]M [TITLE]There For You [PERFORMER]Martin Garrix & Troye Sivan [MUSICID]21120 [LABEL]
[LINETYPE]M [TITLE]Shut Up and Dance [PERFORMER]Walk The Moon [MUSICID]20634 [LABEL]
繼續這樣跌下去,用一個新的[LINETYPE] S爲一天的每一個小時。
現在,我想達到的目標,是讓每一個小時的陣列 - 包含另一個數組與支架作爲鍵的每個值:
array("00:00:00" => array(
array("LINETYPE" => "M",
"TITLE" => "There For You",
"PERFORMER" => "Martin Garrix & Troye Sivan",
"MUSICID" => "21120",
"LABEL" => ""),
array("LINETYPE" => "M",
"TITLE" => "Shut Up And Dance",
"PERFORMER" => "Walk The Moon",
"MUSICID" => "20634",
"LABEL" => "")
), "01:00:00" => array(
[...]
);
的正則表達式來搜索每個小時應該是正確的,但似乎preg_split不支持多個捕獲組。
到目前爲止,我發現的所有答案都在一個更基本的層面上,如爆炸逗號。
這是我的代碼到目前爲止。
$test = get_musiclog("06082017");
$hours = array();
$regex = "(\[LINETYPE\]S\t\[STARTTIME\])((?:(?:[0-2][0-9])|(?:[2][0-3])|(?:[0-9])):(?:[0-5][0-9])(?::[0-5][0-9])?(?:\\s?)?)\n";
if (preg_match_all ("/".$regex."/is", $test, $matches)) {
foreach($matches[2] as $hour) {
$hours[$hour] = ""; // Music array
}
}
幾乎沒有任何頭髮留在頭腦裏想着這些問題。任何人都可以將我指向正確的方向嗎?
- 我如何拆分字符串 「[LINETYPE] S [STARTTIME] XX:XX:XX」 和保持時間的關鍵?
- 如何知道結構是[鍵]值\ t而\ n是分隔符的其餘元素?
- 「數組內的數組」是否正確?
不要建立一個模式來匹配所有,使用* stream_get_line塊讀取文件*以字符串' [LINETYPE] S'(例如)作爲第三個參數。 –
不確定''LINETYPE「=>」M「'是一個需要保留的相關信息,它似乎與文件格式本身更相關。 –