我有这些数据:
920-1063-03@0001D92E@2012-07-02 920-1063-04@00002F5F@2012-07-02 920-1063-04@00002453@2012-07-02 920-1063-03@0001D256@2012-07-02 920-1063-03@0001E225@2012-07-02 920-1063-03@0001E3C1@2012-07-02 920-1063-04@00001EA6@2012-07-02 920-1063-03@0001D316@2012-07-02 920-1063-04@00002A41@2012-07-02 920-1063-04@00001ADA@2012-07-02 920-1063-04@00002DFD@2012-07-02 920-1063-03@0001C595@2012-07-02 920-1063-04@00001C24@2012-07-02 920-1063-04@00002341@2012-07-02 920-1063-04@00001645@2012-07-02 920-1063-04@00001C04@2012-07-02
我试图以@
符号分隔。
要做到这一点,我有这个代码:
<?php
$filename = "tru_cage_DSB_sn";
$fd = fopen ($filename, "r");
$contents = fread ($fd,filesize ($filename));
fclose ($fd);
$delimiter = "@";
$splitcontents = explode($delimiter, $contents);
$counter = "";
foreach ( $splitcontents as $color ){
$counter = $counter+1;
echo "<b>Split $counter: </b> $color<br>";
}
?>
输出将如下:
Split 1: 920-1063-03
Split 2: 0001D92E
Split 3: 2012-07-02 920-1063-04
Split 4: 00002F5F
Split 5: 2012-07-02 920-1063-04
但是,我希望拆分也将2012-07-02 920-1063-04
分成两个字符串,由空格分隔。那么输出应该是这样的吗?
Split 1: 920-1063-03
Split 2: 0001D92E
Split 3: 2012-07-02
Split 4: 920-1063-04
Split 5: 00002F5F
Split 6: 2012-07-02
Split 7: 920-1063-04
如何进一步拆分?
或者,有没有办法直接将这些数据插入到具有3列的mySQL数据库中?
答案 0 :(得分:2)
您可以使用preg_split
代替explode
来拆分包含您要使用的分隔符的正则表达式:
$delimiter = "/@| /";
$splitcontents = preg_split($delimiter, $contents);
此外,您可能应该将$counter
初始化为0
而不是空字符串。
或者,作为Ignacio commented,使用fgets
逐行阅读文件。
答案 1 :(得分:1)
<?php
$text = '920-1063-03@0001D92E@2012-07-02 920-1063-04@00002F5F@2012-07-02 920-1063-04@00002453@2012-07-02 920-1063-03@0001D256@2012-07-02 920-1063-03@0001E225@2012-07-02 920-1063-03@0001E3C1@2012-07-02 920-1063-04@00001EA6@2012-07-02 920-1063-03@0001D316@2012-07-02 920-1063-04@00002A41@2012-07-02 920-1063-04@00001ADA@2012-07-02 920-1063-04@00002DFD@2012-07-02 920-1063-03@0001C595@2012-07-02 920-1063-04@00001C24@2012-07-02 920-1063-04@00002341@2012-07-02 920-1063-04@00001645@2012-07-02 920-1063-04@00001C04@2012-07-02';
$matches = preg_split('#[@\s]#msi', $text);
if (count($matches)) {
$counter = 0;
foreach ( $matches as $color ){
$counter = $counter++;
echo "<strong>Split $counter: </strong> $color<br/>\n";
}
}
?>
输出:
<strong>Split 1: </strong> 920-1063-03<br/>
<strong>Split 2: </strong> 0001D92E<br/>
<strong>Split 3: </strong> 2012-07-02 <br/>
<strong>Split 4: </strong> 920-1063-04<br/>
<strong>Split 5: </strong> 00002F5F<br/>
编辑:我使用了preg_split
作为马特提到的,更简单。