【问题标题】:Php Upload CSV and Get Column dataphp上传CSV并获取列数据
【发布时间】:2016-09-13 17:00:45
【问题描述】:

我想做的是用 PHP 上传一个 CSV 文件。第一行是列名,下面是数据(当然)。每个列名称可以更改取决于最终用户上传。所以我们需要的主要列名可以改变点(A1或B1等......)所以假设我需要的列是B1,我需要获取B中的所有数据。不知道如何去。到目前为止,这就是我所拥有的。有什么想法吗?

        ini_set("allow_url_fopen", 1);

        $handle = fopen($_FILES['fileToUpload']['tmp_name'], 'r') or die ('cannot open the file');

        while(!feof($handle)) {
            $data[] = fgetcsv($handle);
        }
        var_dump($data);

        fclose($handle);

更新: 我正在将此文件从 .CSV 导入 PHP

我需要搜索以“SKU”开头的列标题,然后是“COST” 从那里找到这些后,我想要整个列...... B,E。但是这些列字母可能会改变,这取决于最终用户如何导出它。我不需要行,只需要列。

【问题讨论】:

  • “那么当我得到数组 [1] 时,我只需要得到列 [1] 的其余数据” – 所以,循环遍历数组,并且对于每个“行”访问具有该索引的元素......?不清楚您的实际问题是什么。
  • 我更新了我在主要问题中寻找的内容。谢谢。
  • 你可以删除你的代码的第一行——你不需要allow_url_fopenfopen()来自$_FILES的东西。
  • 先在标题行搜索列名的索引(不知道的可以去查看手册中的数组函数)然后使用这些索引来获取数据的相应列。如果您需要来自多个列的值,那么首先将这些索引放在一个数组中可能是有意义的,然后您可以每次循环。

标签: php csv


【解决方案1】:

文件上传到服务器后,使用类似下面的代码来解析它并实际将其用作数组[];

代码:

$filename = "upload/sample.csv";
if (($handle = fopen($filename, 'r')) !== FALSE){
    while (($row = fgetcsv($handle, 1000, ",")) !== FALSE){
   print_r($row);
 }
}

这是一种方法,您还可以阅读更多关于它的信息here

【讨论】:

  • 这就是我正在做的... $key = array_search('column1', $row); ..现在给我这个错误。警告:array_search() 期望参数 2 是数组,给定布尔值
  • 请在此处阅读我的回答:stackoverflow.com/a/39477226/6749661
  • 我得到的数组输出是这个样本:array(1652) { [0]=> array(14) { [0]=> string(5) "title" [1] => string(3) "sku" [2]=> string(6) "vendor" [3]=> string(10) "cost_price" .... $key = array_search('sku',$data);然后,当我得到数组 [1] 时,我只需要获取列 [1] 的其余数据。
  • 很抱歉,您需要私下联系我或发布其他问题,因为我很难理解您想要什么。
  • 我更新了我在主要问题中寻找的内容。谢谢。
【解决方案2】:

如果您想要每一行的特定列的值,那么您需要遍历结果并挑选出来。看起来您正在获取一个数组数组,所以...(已编辑以根据标题名称获取列):

$header = $data[0];
unset($data[0]); // delete the header row so those values don't show in results
$sku_index = '';
$cost_index = '';

// get the index of the desired columns by name
for($i=0; $i < count($header); $i++) {
     if($header[$i] == 'SKU') {
         $sku_index = $i;
     }
     if($header[$i] == 'COST') {
         $cost_index = $i;
     }
}

// loop through each row and grab the values for the desired columns
foreach($data as $row) {
    echo $row[$sku_index];
    echo $row[$cost_index];
}

应该得到你想要的。

【讨论】:

  • 我更新了我在主要问题中寻找的内容。谢谢。
  • 确定已更新。我有一段时间没有使用 php,所以可能语法不正确,但这是一种适合你的方法。
  • 哦,如果标题不存在则删除行unset($data[0])
  • 太棒了!肯定的。
猜你喜欢
  • 2021-12-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-31
  • 1970-01-01
相关资源
最近更新 更多