剪切csv并保存在数组中

时间:2014-10-01 11:58:17

标签: php arrays csv

我有一个csv文件,以这种格式构建:

| id | keyword   | description   | more ...   |
| 1  | myKeyword | MyDescription | some stuff | 
| 2  |           |               | some stuff | 
| 3  | myKeyword | MyDescription | some stuff | 

现在,我想创建一个小的PHP脚本,它只读取前三列,然后将它们保存在一个数组中。为此,我查了fgetcsv但是没有做到这一点。然后我试着像这样:

$csv = array_map('str_getcsv', file('myFile.csv'));

但也不是这样。 我得到的文件非常混乱,这就是为什么我必须检查关键字和描述是否存在(更像是他们不是'')。

我的输出数组应该是这样的:

$array[0][0] = 1
$array[0][1] = MyKeyword
$array[0][2] = MyDescription

$array[1][0] = 3
$array[1][1] = MyKeyword
$array[1][2] = MyDescription

先谢谢你

3 个答案:

答案 0 :(得分:0)

好的,没关系,我明白了。 我在fgetcsv

的phpdoc中找到了一个非常好的解决方案
<?php
function get2DArrayFromCsv($file,$delimiter) {
    if (($handle = fopen($file, "r")) !== FALSE) {
        $i = 0;
        while (($lineArray = fgetcsv($handle, 4000, $delimiter)) !== FALSE) {
            for ($j=0; $j<count($lineArray); $j++) {
                $data2DArray[$i][$j] = $lineArray[$j];
            }
            $i++;
        }
        fclose($handle);
    }
    return $data2DArray;
}
?>

答案 1 :(得分:0)

逐行读取CSV,并用分隔符拆分行,并将结果数组附加到结果数组。

array1 = array();
$handle = fopen("file.csv", "r");
if ($handle) {
    while (($line = fgets($handle)) !== false) {
    array1 = array_merge(array1, explode('|',$line);
}
}
fclose($handle);

答案 2 :(得分:0)

您可以先解析所有内容:

  • 使用函数str-getcsv使用其选项(分隔符和附件)。 “基本”函数可能无法捕获csv文件的语法,因为它没有真正的标准。
  • 或者如果您认为值得,请使用此parser class

然后,您可以删除表中不需要的元素,也可以忽略它们。我希望它会对你有所帮助。