【问题标题】:PHP - Sort array by date - not first elementPHP - 按日期排序数组 - 不是第一个元素
【发布时间】:2013-06-07 04:02:08
【问题描述】:

从平面文件中读取...我需要显示按 DESCENDING 日期排序的数组元素(= 最先显示的当前日期)。

不确定...有没有办法简单地按元素 [1] 对数据进行排序,还是我需要将此数据放入第二个数组中,然后对该数组进行排序...或??

然后... 请包括打印部分...输出数据所需的变量。谢谢。

(*是的,我在“堆栈”上看到了其他一些示例。但是,使用“比较”时我无法正确输出值。)

原始数据:
是|2012-12-12|吉姆 无
是的|2013-06-04|乔·史密斯
没有|2013-04-21|Jane Doe

排序数据:
是的|2013-06-04|乔·史密斯
没有|2013-04-21|Jane Doe
是|2012-12-12|吉姆·无

while (!feof($file) ) {
    $lines = fgets($file);
    $ele = explode('|', $lines);

    $db_display = $ele[0];
    $db_date = $ele[1];
    $db_name = $ele[2];

    $db_name = substr_replace($db_name,"",-1); // trim last char

    echo '<td>'.$db_name.'</td><td>'.$db_date.'</td>';
}

【问题讨论】:

  • 只需将第一个日期从数组中取出,然后对其余日期进行排序...
  • 使用array_shift获取数组的第一行,然后排序。
  • usort() 与比较两个参数的元素1 的比较函数一起使用。

标签: php sorting datetime flat-file


【解决方案1】:

这应该能让你到达那里......

假设您从文件名 $infile 获取

$fp = fopen($infile, "w");
$data = array();
while ($rec = fgetcsv($fp, 2048, "|")){
         $data[] = $rec;
}


usort($data, function ($a, $b){
     // if you want to reverse the sort swap a for b
     return strtotime($b[1]) - strtotime($a[1]);
});



foreach($data as $v){
   echo implode("|", $v)."\n";
}

输出到标准输出...您可以轻松地 fopen/fputcsv 相同的数据。

【讨论】:

  • 谢谢。问题:您能否使用我原始帖子中的编码语法发布 WHILE 部分? (仅供参考:我代码中的 $file 是您的 $fp)
  • 无法使用循环,因为您必须在排序之前累积值。但更新后的代码基本上应该是您在答案中发布的替代品。
  • 是的。你是对的。以供其他人将来参考,请发布您的第一个编码解决方案。那是有效的。还有一件事......我将如何分解 FOREACH 中的日期以将日期划分为 MO、DT、YR?
  • 回滚...最简单的爆炸方式是list($yr, $mo, $dt) = explode("-", $b[1]);
  • 抱歉新手问题...我到底应该把“列表/分解”代码行放在哪里?
【解决方案2】:
usort($array, function($x, $y) { 
    return strcmp($y[1], $x[1]);
});

【讨论】:

    猜你喜欢
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-19
    • 1970-01-01
    相关资源
    最近更新 更多