转置 csv 文件数据
Transpose csv file data
我需要帮助将 keys
分配给 PHP 中的 array
。
我的代码是:
//First I make an array of a csv file
$file="C:\path-to-csv\file.csv";
$csv= file_get_contents($file);
$array = array_map("str_getcsv", explode("\n", $csv));
array
:
//echo json_encode($array);
["0","20150717","2:57:00","1437145020","1.56084","1.56096","1.56084","1.56094","5"],
["1","20150717","2:56:00","1437144960","1.56071","1.56089","1.56071","1.56089","9"],
["2","20150717","2:55:00","1437144900","1.5607","1.5607","1.56064","1.56064","2"], //continue
根据 $array
的结果,我需要将特定的 key
分配给特定的列并创建一个新的 array
“$newArray
”。因此,结果如下所示:
//$newArray should print:
"ID" : [0, 1, 2], //I would like delete this value
"n" : [20150717, 20150717, 20150717], //I would like delete this value
"d" : [2:57:00, 2:56:00, 2:55:00], //I would like delete this value
"t" : [1437145020, 1437144960, 1437144900], //column 4
"o" : [1.56084, 1.56071, 1.5607], //column 5
"h" : [1.56096, 1.56089, 1.5607], // column 6
"l" : [1.56084, 1.56071, 1.56064], // column 7
"c" : [1.56094, 1.56089, 1.56064], //column 8
"v" : [5, 9, 2] //column 9
我尝试通过循环和一些函数(例如 array_fill_keys
和 array_column
来做到这一点,但我得不到想要的结果。如果你能帮助我,我将不胜感激,$array
有超过 1000 个条目,因此优化代码执行速度非常重要,老实说超出了我的知识范围,我在 Google 中没有看到任何东西] 帮我完成这个。
谢谢你的时间,对不起我的语法。
EDIT 差不多,这个解决方案可以用 <5.5,当 array_column 不可用时。
对于一个 foreach 循环来说,超过 1000 个条目似乎并不多。
$keys = array('t','o','h','l','c','v');
$newArray = array();
foreach ($array as $j) {
$r = array_slice($j, 3);
foreach ($r as $i => $v) $newArray[$keys[$i]][] = $v*1;
}
Json 编码结果将是
"t":[1437144900,1437144900,1437145020],
"o":[1.5607,1.5607,1.56084],
"h":[1.5607,1.5607,1.56096],
"l":[1.56064,1.56064,1.56084],
"c":[1.56064,1.56064,1.56094],
"v":[2,2,5]
运行 一个包含 10.000 个条目的数组占用了
0.020426
您可以在 PhpFiddle 上测试自己。
如果您使用的是 PHP 5.5,则可以使用 array_column
:
$newArray = array(
't' => array_column($array, 3),
'o' => array_column($array, 4),
'h' => array_column($array, 5),
...
);
如果您使用的是旧版 PHP,您可以在 Is there a function to extract a 'column' from an array in PHP?
找到它的 PHP 实现
我需要帮助将 keys
分配给 PHP 中的 array
。
我的代码是:
//First I make an array of a csv file
$file="C:\path-to-csv\file.csv";
$csv= file_get_contents($file);
$array = array_map("str_getcsv", explode("\n", $csv));
array
:
//echo json_encode($array);
["0","20150717","2:57:00","1437145020","1.56084","1.56096","1.56084","1.56094","5"],
["1","20150717","2:56:00","1437144960","1.56071","1.56089","1.56071","1.56089","9"],
["2","20150717","2:55:00","1437144900","1.5607","1.5607","1.56064","1.56064","2"], //continue
根据 $array
的结果,我需要将特定的 key
分配给特定的列并创建一个新的 array
“$newArray
”。因此,结果如下所示:
//$newArray should print:
"ID" : [0, 1, 2], //I would like delete this value
"n" : [20150717, 20150717, 20150717], //I would like delete this value
"d" : [2:57:00, 2:56:00, 2:55:00], //I would like delete this value
"t" : [1437145020, 1437144960, 1437144900], //column 4
"o" : [1.56084, 1.56071, 1.5607], //column 5
"h" : [1.56096, 1.56089, 1.5607], // column 6
"l" : [1.56084, 1.56071, 1.56064], // column 7
"c" : [1.56094, 1.56089, 1.56064], //column 8
"v" : [5, 9, 2] //column 9
我尝试通过循环和一些函数(例如 array_fill_keys
和 array_column
来做到这一点,但我得不到想要的结果。如果你能帮助我,我将不胜感激,$array
有超过 1000 个条目,因此优化代码执行速度非常重要,老实说超出了我的知识范围,我在 Google 中没有看到任何东西] 帮我完成这个。
谢谢你的时间,对不起我的语法。
EDIT 差不多,这个解决方案可以用 <5.5,当 array_column 不可用时。
对于一个 foreach 循环来说,超过 1000 个条目似乎并不多。
$keys = array('t','o','h','l','c','v');
$newArray = array();
foreach ($array as $j) {
$r = array_slice($j, 3);
foreach ($r as $i => $v) $newArray[$keys[$i]][] = $v*1;
}
Json 编码结果将是
"t":[1437144900,1437144900,1437145020],
"o":[1.5607,1.5607,1.56084],
"h":[1.5607,1.5607,1.56096],
"l":[1.56064,1.56064,1.56084],
"c":[1.56064,1.56064,1.56094],
"v":[2,2,5]
运行 一个包含 10.000 个条目的数组占用了
0.020426
您可以在 PhpFiddle 上测试自己。
如果您使用的是 PHP 5.5,则可以使用 array_column
:
$newArray = array(
't' => array_column($array, 3),
'o' => array_column($array, 4),
'h' => array_column($array, 5),
...
);
如果您使用的是旧版 PHP,您可以在 Is there a function to extract a 'column' from an array in PHP?
找到它的 PHP 实现