我PHP
csv
数据,如下所示(注意,它是带有换行符的文本,而不是文件):
$data = 'A,B,C,D,E,F,G,H
1,1,2014-12-10,5,1,2,0,2
2,7,2014-12-09,9,0,,7,2';
如何将列提取为排除标题的数组?例如,如果我想提取第 4 列,它将包括 5 和 9。
更新:我试过了
$te = array_column($data,'D');
我收到错误:Warning: array_column() expects parameter 1 to be array,
您可以使用
str_getcsv()
将每一行作为数组读取(丢弃第一行以跳过标题)。然后只需保留相关列,例如:
$lines = preg_split("/(?:'r?'n|'r'n?)/", $data); // Split lines
array_shift($lines); // Discard header
$result = array();
foreach ($lines as $csv) {
$row = str_getcsv($csv);
$result[] = $row[3];
}
var_dump($result);
根据下面评论中的cHao建议,如果您需要对通用CSV数据提供更强大的支持,则可以将字符串转储到虚拟文件中并改用fgetcsv()
(它已经正确处理了多行输入的解析):
$fp = fopen('php://temp', 'r+');
fputs($fp, $data);
fseek($fp, 0);
$result = array();
fgetcsv($fp);
while (false != ($row = fgetcsv($fp))) {
$result[] = $row[3];
}
fclose($fp);
var_dump($result);
如果这是一个逗号分隔的字符串,在这种情况下可以使用str_getcsv()
:
// load the string and explode, then apply str_getcsv
$data = array_map('str_getcsv', explode("'n", $request->getResponseBody()));
array_shift($data); // remove the header
$fourth_column = array();
foreach($data as $line) {
if(!empty($line[3])) {
$fourth_column[] = $line[3]; // indices start at zero
}
}