【发布时间】:2014-05-31 10:41:57
【问题描述】:
我想逐列读取 csv 文件并将每一列数据放入指定的数组中
[country]
Array(
[0]=>Australia
)
[city]
Array(
[0]=>vic
)
【问题讨论】:
我想逐列读取 csv 文件并将每一列数据放入指定的数组中
[country]
Array(
[0]=>Australia
)
[city]
Array(
[0]=>vic
)
【问题讨论】:
你可以使用fgetcsv函数:
if (($handle = fopen("inputfile.csv", "r")) !== false) {
$filesize = filesize("inputfile.csv");
$firstRow = true;
$aData = array();
while (($data = fgetcsv($handle, $filesize, ";")) !== false) {
if($firstRow) {
$aData = $data;
$firstRow = false;
} else {
for($i = 0;$i < count($data); $i++) {
$aData[$i][] = $data[$i];
}
}
}
fclose($handle);
}
所以你会得到一个带有第一行标题的多维数组。
【讨论】:
您可以像往常一样使用 fopen() 打开文件,使用 fgets() 获取每一行,然后像这样在每个逗号上简单地分解它:
<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
if ($handle)
{
while (($buffer = fgets($handle)) !== false)
{
$array=explode(",",$buffer);
print_r($array)
// You have your array at this point.
}
if (!feof($handle))
{
echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
?>
【讨论】:
没有一个不必要的cicle:
$handle = fopen($name, "r");
$first_row = true;
$final_ata = array();
$headers = array();
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($first_row) {
$headers = $data;
$first_row = false;
} else {
$final_ata[] = array_combine($headers, array_values($data));
}
}
echo '<pre>';
print_r($final_ata);die;
会给你结果:
Array
(
[0] => Array
(
[column1] => value
[column2] => value
[column3] => value
)
[1] => Array
(
[column1] => value
[column2] => value
[column3] => value
)
[2] => Array
.......
【讨论】:
这是一个逗号分隔的值,不完全是按列。如果您在列值中有逗号,那么它也会破坏您的字符串。
$file = $_FILES['file']['tmp_name']; $handle = fopen($file, "r");
while(($filesop = fgetcsv($handle, 100000, ",")) !== false){
$abc= $filesop[0];
$xyz= $filesop[1];
}
【讨论】: