首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >csv文件的多维数组排序过程

csv文件的多维数组排序过程
EN

Stack Overflow用户
提问于 2012-07-25 12:35:25
回答 1查看 1.8K关注 0票数 0

PHP中有一个数组。它的设置如下

代码语言:javascript
复制
$array_var = array(array(1,2,3,4), array(5,6,7,8), array(3,5,3,9));

这个数组来自使用fgetcsv函数获得的csv文件。如果要正确回显数组以显示其内容,我将使其显示如下所示:

代码语言:javascript
复制
field1  field2  field3  field4
  1       2       3       4
  5       6       7       8
  3       5       3       9

等等等等。

现在我想对这个数组进行排序。但是我只想对所有数组中的一个列进行排序。换句话说,例如,我想取主数组中每个数组中的每三个值,并按字母顺序依次列出它们。因此,对于特定情况,我们将从上面的表中获取field3中的每个值,并对其进行排序。并使其能够使排序的最终结果重新排列列,使它们与值正确地排列在一起。

最终结果

代码语言:javascript
复制
field1  field2  field3  field4
  1       2       3       4
  3       5       3       9
  5       6       7       8

等等等等。

如何才能做到这一点?

挑战的原因是我试图从csv文件中的单个列中删除重复项。我认为最快的方法是对值进行排序,并在范围内寻找匹配。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-25 14:26:14

很难给出确切的答案,因为在你的解释中有一些东西你遗漏了。例如,按照其中一个列排序但在其他列中有差异的行应该如何在内部排序?它们是按其他列排序,还是按原来的顺序排列,还是按任意顺序排列?

考虑到我解释你的问题的方式,我可能会定义我自己的类进行比较。

代码语言:javascript
复制
<?php
class ColumnCompare {
  function __construct($column) {
    $this->column = $column;
  }

  function compare($a, $b) {
    if ($a[$this->column] == $b[$this->column]) {
      return 0;
    }
    return ($a[$this->column] < $b[$this->column]) ? -1 : 1;
  }
}

// Hard-coded input
$array_var = array(array(1,2,3,4), array(5,6,7,8), array(3,5,3,9));
$sort_by_col = 2;

// Create object for sorting by a particular column
$obj = new ColumnCompare($sort_by_col);
usort($array_var, array($obj, 'compare'));

// Write CSV to standard output
$sout = fopen('php://stdout', 'w');
foreach ($array_var as $fields) {
  fputcsv($sout, $fields);
}
fclose($sout);
?>

最后,你提出了另一个问题,这是不可能回答的。如果从单个列中删除重复项,那么行的其余部分将发生什么情况?应该只保留一行,在这种情况下,哪一行?您也可以通过“删除重复项”来表示要移除值并将其置入空值中。如果你想要解决这个问题,你需要提供一些细节。

如果CSV文件非常简单,而且任何带有重复项的行上的所有值都是相同的(在编辑之前的示例中就是如此),则可以轻松地运行以下命令

代码语言:javascript
复制
sort myfile.csv | uniq

但我有种感觉比这更复杂。例如,uniq还具有只返回重复行的设置。还可以编写命令从每一行检索某一列并对其进行操作。但正如我所说,如果没有更多的信息,就不可能构建这样的命令。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11649840

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档