2016-09-17 83 views
1

我想用PHP循環數據組,但我的問題是我想將所有semicolons (;)和換行符enterspace替換爲逗號(,)。循環播放也必須從我的評論開始(<- Record Start) & (record end)在循環中將字符串轉換爲逗號在PHP中

數據:

P;A251213027;142G;3142831233555;10062014:0420;101;3000.00;0.00; (<- Record Start) 
050;0;0;0;N;3000.00;0.00;0.00;Y;;;2PH_02 
C;LOIVINO;ICIO 
C;1AN INT;MALY;MAR;;;MAL 
C;GRSE;LPES 
C;B;PHILIPPINES;N0203004177;;Y;12112015;12111977;PHILIPPINES;PHILIPPINES 
C;Y;09064656319;DO NOT HAVE;DO NOT HAVE;FRIEND;; 
C; 
C;;;B125 LO259;QU2TY;;PH (<- End Record) 

編輯 我發現其中記錄必須開始和結束。

這裏是我的代碼

// break each result set 
$parts = explode('C;', $str); 

foreach($parts as $part){ 
    // C;;; is not in the $parts array, if you want it in the result 
    // add it here 
    $res = explode(';', $part); 
    foreach($parts as $part){ 
     // you have each line of the result 
    } 

} 
+0

嘗試使用 - str_replace(';',',',$ var) –

+0

我沒有得到您的要求。你有多個'C;'在那裏,爲什麼有些「結束循環」,有些不是? – Devon

+0

您已第二次編輯了您的示例。你確定這是你想要的嗎?你是否嘗試過海報提供的樣本? –

回答

1

看你的數據,你不希望發生爆炸C;C; + linebreak。我不知道如何簡潔(wellformed)您的數據,讓我們發揮它的安全:刪除空格,查詢各種換行符,甚至像

C;1;2;3;4;5;6;7 
C; <- end_loop 
C; <- end_loop 
C;1;2;3;4;5;US 

首先確保沒有在數據的結尾斷行,並添加一些種類的數據年底簽署(在這種情況下,下劃線_):

$str.= "\r\n_"; 

現在刪除所有空格。而且,因爲我不知道什麼樣的你用換行符的,通過一些其他的,易於識別的字符替換各種人,像*並確保沒有換行雙:

$str = str_replace (' ', '', $str); //remove all spaces 
$str = str_replace (array('\r\n', '\n', '\r'), '*', $str); //replace all linebreaks 
$str = str_replace ('**', '*', $str); //remove double linebreaks 

然後C;*爆炸,作爲一個數據部分的結尾:

$str= explode('C;*' , $str); 

現在每個部分可以更換;*用逗號:

foreach($str as $v){ 
    $new_str[] = str_replace (array('*', ';'), ',', $v) . 'C,'; 
    } 

最後一件事做,因爲你將在數組的末尾有不必要的_C,結束:

end($new_str); 
$key = key($new_str); 
if($new_str[$key]=='_C,'){ 
    unset($new_str[$key]); 
    } 

爲什麼_在文件的結尾?確保在文件中間只有C;的部分和文件末尾的最後一部分。

[編輯]

由於實際數據從第一給定的樣品,經修訂的答案不同。

$str.="\r\n_"; 
$str = str_replace (' ', '', $str); 
$str = str_replace (array("\r\n", "\n", "\r"), '*', $str); 
$str = str_replace ('**', '*', $str); 
$str = str_replace ('C;*', '~~', $str); 
$str = str_replace (';*', ';', $str); 
$str = str_replace ('*', ';', $str); 

$str= explode('~~' , $str); 
foreach($str as $v){ 
    $new_str[] = str_replace (array('*', ';'), ',', $v) . 'C,'; 
    } 

end($new_str); 
$key = key($new_str); 
if($new_str[$key]=='_C,'){ 
    unset($new_str[$key]); 
    } 
+0

實際數據與您提供的樣本不同。我編輯了我的答案,它現在很好地工作,並提供所需的輸出。 – Michel

+0

對多次編輯抱歉,但我保證這是最後一次。請檢查記錄開始和結束的位置。謝謝! – phpmeter

+0

嗨@Michel有什麼更新? – phpmeter

1

嘗試preg_replace()功能是這樣的。

//$str your string with semicolons (;) and new line charecter 
preg_replace('/;\s+/', ',', trim($str)); 
相關問題