我在csv
中有PHP
个数据,如下所示(注意,它的文字中包含换行符号,而不是文件):
$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,
答案 0 :(得分:2)
您可以使用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);
答案 1 :(得分:1)
如果这是逗号分隔的字符串,则在这种情况下可以使用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
}
}