我想用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
}
}
答案 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]);
}