【问题标题】:Using samples() with php-ml在 php-ml 中使用 samples()
【发布时间】:2017-09-26 18:43:41
【问题描述】:

我正在使用 php-ml 并接收一个包含 6 列和数千行的 .csv 文件,我希望每个数组的每个第 5 个元素(列)都保存在 $samples 中。我尝试了以下方法,它给了我每个数组的第一个元素。

$dataset = new CsvDataset('myCsvFile.csv', 1);

$samples = [];
foreach ($dataset->getSamples() as $sample) {
    $samples[] = $sample[0];
}

但是,这给了我每个数组的第一个元素,如果我按照语法上的想法更改$sample[0] to $sample[4],这将起作用,我会在有问题的行上得到一个未定义的偏移量。我是 PHP 新手,不明白为什么会发生这种情况。

如果代码如上所示并打印出来,则如下所示:

    Array
(
    [0] => 1157
    [1] => 1157
    [2] => 1157
    [3] => 1157
    [4] => 1157
    [5] => 1157
    [6] => 1157
    [7] => 1157
    [8] => 1157

...等等。

【问题讨论】:

  • 你能把csv 1或line的样本数据放在这里
  • 到目前为止你尝试过什么? Stack Overflow 不是代码编写服务...
  • @TomUdding 我已经尝试编辑了这个问题
  • @johnfish92 '0' ($sample[0];) 选择 CSV 文件的第一列。 '1' 将选择第二列,'2' 将选择第三列,依此类推...
  • 我添加了您之前的代码,因为您刚刚删除了代码并用完全不同的代码替换了它。也许您应该发布您实际使用的内容。

标签: php php-ml


【解决方案1】:

你可以试试这个

$csv = array();
$csvNewArray = array();
$lines = file('myCsvFile.csv', FILE_IGNORE_NEW_LINES);
foreach ($lines as $key => $value)
{
    $csv[$key] = str_getcsv($value);
    if(isset($csv[$key][4])){
     $csvNewArray[$key] = $csv[$key][4];
    }
}

【讨论】:

  • 为什么要存储到$csv[$key][6]?他说他想将第五个元素存储到一个新数组中。
  • 因为数组从第 0 个元素开始
  • 你为什么要分配到同一个数组中?
  • 因为如果我们进行多个循环的话会有数千行而不是花费太多时间。所以我更新了我的答案以获得新数组中的第 5 个元素
  • 您不需要多个循环。就$new_array[] = $csv[$key][4]
【解决方案2】:

使用fgetcsv() 从文件中读取,然后访问这些数组的适当元素以获得每行的第五项。

$fh = fopen("myCsvFile.csv", "r") or die("Can't open CSV file\n");
$csv = array();
$sample = array();
while ($row = fgetcsv($fh)) {
    $csv[] = $row;
    $sample[] = $row[4];
}
fclose($fh);

【讨论】:

  • 这里需要为多个$sample[] = $row[4];
猜你喜欢
  • 2017-09-26
  • 1970-01-01
  • 2020-03-24
  • 2015-04-28
  • 1970-01-01
  • 2019-08-08
  • 2020-09-17
  • 1970-01-01
  • 2018-07-21
相关资源
最近更新 更多