在PHP中解析CSV文件
问题描述:
我有一个文件,里面有这样的文本,我想修改它。在PHP中解析CSV文件
54.724498;25.340568;1262758;21;;14:51:42;A>B;1&54.70562;25.31099;1263367;21;;14:51:39;B>A;1&54.71681;25.305468;1262617;21;;14:51:33;A>B;1&54.68858;25.279688;1277721;20;;14:51:22;A>B;
我希望它显示为这个
54.724498 - 25.340568 - 1262758 - 21 - 14:51:42 - A>B - 1
54.70562 - 25.31099 - 1263367 - 21 - 14:51:39 - B>A - 1
所以每次发现“&”的标志,它跳跃到另一条线路。如果每个字符串都添加到不同的数组中,那将会很好,因为我稍后将创建一个表。因此,它应该是这样的 54.724498 - 阵列,25.340568 - 数组b,1262758 - 阵列C等... 我现在的代码是这样的:
<?php
$data = "54.724498;25.340568;1262758;21;;14:51:42;A>B;1&54.70562;25.31099;1263367;21;;14:51:39;B>A;1&54.71681;25.305468;1262617;21;;14:51:33;A>B;1&54.68858;25.279688;1277721;20;;14:51:22;A>B;");
//var_dump($data);
$parts = explode(';', $data);
$array = array();
foreach($parts as $part) {
array_push($array,$part);
}
print_r($array);
?>
答
如果你想将数据传送到一个表,然后一个很好的方法可以是explode()
然后explode()
由&
字符串使用array_map()
通过;
每个元素,
$data = "54.724498;25.340568;1262758;21;;14:51:42;A>B;1&54.70562;25.31099;1263367;21;;14:51:39;B>A;1&54.71681;25.305468;1262617;21;;14:51:33;A>B;1&54.68858;25.279688;1277721;20;;14:51:22;A>B;";
$array = explode('&', $data);
$array = array_map(function($value){
return explode(';', $value);
}, $array);
print_r($array);
您现在必须准备好被转移到一个表中的数据的多维数组,
Array
(
[0] => Array
(
[0] => 54.724498
[1] => 25.340568
[2] => 1262758
[3] => 21
[4] =>
[5] => 14:51:42
[6] => A>B
[7] => 1
)
[1] => Array
(
... etc...
这里是一个活生生的例子 - http://sandbox.onlinephpfunctions.com/code/b9b4f0896b3fdda3da41797e9392d825bb044118
答
试试这个:
$re = '/(.*)&(.*)/s';
$str = '54.724498;25.340568;1262758;21;;14:51:42;A>B;1&54.70562;25.31099;1263367;21;;14:51:39;B>A;1&54.71681;25.305468;1262617;21;;14:51:33;A>B;1&54.68858;25.279688;1277721;20;;14:51:22;A>B;';
preg_match_all($re, str_replace(';', ' - ', $str), $matches);
// Print the entire match result
echo '<pre>';print_r($matches);
什么是你的代码的电流输出或结果? – Overdrivr