2013-06-13 20 views
1

我有一羣需要整理的足球隊的數據。目前,它看起來像這樣(用於演示目的,我只包括3):PHP - 將雜亂的字符串轉換爲可用的字符串

1 
Team One 
9 7 1 1 31 13 18 22 
2 
Team Two 
9 6 2 1 25 21 4 19 
3 
Team Three 
9 4 3 2 26 18 8 14 

爲清楚起見,我將解構第3行:

1\t\n 
Team One\n 
9\t7\t1\t1\t31\t13\t18\t22 

注意有一個怎麼樣然後在每個團隊的位置之後換行。然後,下一行的團隊名稱,只有一個換行符。最後,所有關於該團隊的細節。然後下一支球隊的數據開始。

我需要它轉換爲:

1,Team One,9,7,1,1,31,13,18,22 
2,Team Two,9,6,2,1,25,21,4,19 
3,Team Three,9,4,3,2,26,18,8,14 

每行開始與隊中的地位,那麼球隊的名字,那麼每個統計 - 所有用逗號分隔。

我試圖用很少的運氣做到這一點。我想像某種奇特的正則表達式可以做到這一點,但我不知道如何...希望有人可以幫助!

+0

您是否聽說過awk及其實現gawk? –

+0

@PatrykZiemkowski沒聽說過,會看看! – Aryeh

+0

它專爲您的問題而設計。 –

回答

1

您可以使用

$in = file("log.txt"); 
$out = fopen("php://output", "w"); 

foreach(array_chunk($in, 3) as $group) { 
    $group = array_map("trim", $group); 
    $group[2] = implode(",", str_getcsv($group[2], "\t")); 
    fputcsv($out, $group); 
} 

輸出

1,"Team One","9,7,1,1,31,13,18,22" 
2,"Team Two","9,6,2,1,25,21,4,19" 
3,"Team Three","9,4,3,2,26,18,8,14" 

如果你想空外殼,然後使用

fputcsv($out, $group, ",", " "); 

輸出

1, Team One , 9,7,1,1,31,13,18,22 
2, Team Two , 9,6,2,1,25,21,4,19 
3, Team Three , 9,4,3,2,26,18,8,14 
+1

謝謝!這給了我最好的結果! – Aryeh

+1

+1。尼斯,刪除我的:) –

+0

取消刪除它.....讓我們試驗sscanf – Baba

0
<?php 
    $resultstr = array(); 
     foreach($Teams as $items){ 
     $resultstr[] = $items['Team One']; 
    } 
    $items = implode(", ",$resultstr); 
    echo $items; 
?> 

類似的東西。你可以用你自己的數據編輯它,因爲你沒有在你的問題中提到。