在PHP循环期间将字符串转换为逗号

时间:2016-09-17 03:35:17

标签: php

我想用PHP循环数据组,但我的问题是我想将所有semicolons (;)和换行符enterspace替换为逗号(,)。循环播放也必须从我的评论(<- Record Start)&amp; (record end)

数据:

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
    }

}

2 个答案:

答案 0 :(得分:1)

尝试preg_replace()这样的功能。

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

答案 1 :(得分:1)

查看您的数据,您不希望在C;上展开,而是在C; + linebreak上展开。我不知道您的数据有多好,所以让我们安全地玩吧:删除空格,搜索各种换行符,甚至是

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]);
    }