2016-12-15 2 views
1

У меня есть файл с текстом, подобным этому, и я хочу его изменить.Parse CSV-подобный файл в PHP

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 - массив б, 1262758 - массив с и так далее ... Мой код теперь это:

<?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); 

?> 
+0

Что такое выходной ток или результат вашего кода? – Overdrivr

ответ

0

Если вы хотите передать данные в таблицу, то хороший подход может быть 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

0

Попробуйте это:

$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);