制表符将数据分隔为JSON

时间:2016-08-04 15:17:30

标签: php arrays json

我正在尝试将一些制表符分隔的数据换成更好的格式,我可以使用它。 JSON会很棒。

数据示例在此处:http://www.nlaa.ca/results/rr/2013/20130728tely10results.php

我已经下载了所有数据,并且每年都有自己的文本文件。从那里开始,我将它们全局化并将它们运行到一个foreach中并逐行读取它们。像这样:

<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<table>
<tbody>
   <tr>  
     <td data-order="2013-05-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-04-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-03-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-02-02T21:01:26.0828604Z" class="td-limit"></td>
     <td data-order="2013-01-02T21:01:26.0828604Z" class="td-limit"></td>
   </tr>
</tbody>
</table>

从这里开始,我想把所有的行放在一个巨大的关联数组中:

// Grab all the .txt files
foreach (glob('src-data/*.txt') as $filename ) {
    $handle = fopen($filename, 'r');
    if ( $handle ) {
        // run line by line through the files
        while (( $line = fgets($handle) ) !== false) {
            // grab the fields 
            $clean = preg_split("/ +/", $line);

这种方法有效,但它只为我拥有的每个.txt文件创建一个数组。

当我 // All the fields $position = $clean[1]; $name = $clean[3] . " " . $clean[4]; $time = $clean[5]; $class = $clean[6]; $class_place = $clean[7]; $runners['position'] = $position; $runners['name'] = $name; $runners['time'] = $time; $runners['class'] = $class; $runners['class place'] = $class_place; 时,我得到两个数组 - 我在该目录中的两个示例.txt文件中的每一个都有一个数组。

我想将每个新行推送到我的print_r($runners);数组,因为我循环遍历它。

我的最终目标是创建一个大的json文件,我可以使用Js。我认为只要$runners[]正在运行,json_encode($runners)即可运行,但感谢任何建议。谢谢!

这是我正在使用的完整代码,只是为了确定:

$runners

2 个答案:

答案 0 :(得分:1)

你不是&#34;推动&#34;到一个阵列上。你只有一个数组,你不断覆盖一些成员值。你应该有更多的东西:

$arr = array();
foreach(... list of files ...) {
     $fh = fopen($file, 'r');
     while ($row = fgetcsv($fh, .... options ...)) {
        ... process $row ...
        $arr[] = $row;
     }
     fclose($fh);
}

请注意[] - 这是&#34; push&#34;操作

答案 1 :(得分:1)

替换:

$runners['position'] = $position;
$runners['name'] = $name;
$runners['time'] = $time;
$runners['class'] = $class;
$runners['class place'] = $class_place;

$runners[] = $clean;

使用:

$runners[] = [
    'position' => $position,
    'name' => $name,
    'time' => $time,
    'class' => $class,
    'class_place' => $class_place
];

你会得到类似(虚拟数据)的东西:

array(
    [0] => array(
        'position' => 1,
        'name' => 'Hans Muster',
        'time' => '05:18',
        'class' => '1A',
        'class_place' => '2'
    ),
    [1] => array(
        'position' => 4,
        'name' => 'Franz Muster',
        'time' => '08:12',
        'class' => '1A',
        'class_place' => '7'
    )
)