使用php按日期和时间列对csv数据进行排序 背景:
我有一个读取csv文件的php脚本。此csv文件包含列。最后两列是日期和时间 我需要做的是按日期和时间列按升序排列这些数据 我的PHP脚本:使用php按日期和时间列对csv数据进行排序 背景:,php,csv,sorting,Php,Csv,Sorting,我有一个读取csv文件的php脚本。此csv文件包含列。最后两列是日期和时间 我需要做的是按日期和时间列按升序排列这些数据 我的PHP脚本: $data = file("myfile.csv"); $string = ""; for($i = 1; $i < count ( $data ); $i ++) { $info1 = str_getcsv($data [$i],",",''); $string
$data = file("myfile.csv");
$string = "";
for($i = 1; $i < count ( $data ); $i ++)
{
$info1 = str_getcsv($data [$i],",",'');
$string .= $info1 [4] . "," ; //colomns 1 in position 4 in csv file
$string .= $info1 [6] . "," ; //colomns 2 in position 6 in csv file
$string .= $info1 [7] . "," ; //colomns 3 in position 7 in csv file
//colomns 4 --this colomn contain date like this format (2/8/2016)
$string .= $info1 [2] . "," ;
//colomns 5 --this colomn contain timelike this format (12:30 AM)
$string .= $info1 [10];
$string .= "\n";
}
我需要像这样排序:
mark,mark,456345,5/10/2016,9:00 AM
mordl,mordl,23564,5/10/2016,1:00 PM
corten,corten,3216589,5/10/2016,12:00 PM
jack,jack,123645,5/10/2016,8:00 AM
olemn,olemn,29845155,5/10/2016,2:00 PM
jab,jab,457362,5/10/2016,10:45 AM
monk,monk,326251,5/10/2016,3:00 PM
jack,jack,123645,5/10/2016,8:00 AM
mark,mark,456345,5/10/2016,9:00 AM
jab,jab,457362,5/10/2016,10:45 AM
corten,corten,3216589,5/10/2016,12:00 PM
mordl,mordl,23564,5/10/2016,1:00 PM
olemn,olemn,29845155,5/10/2016,2:00 PM
monk,monk,326251,5/10/2016,3:00 PM
usort( $first_dim, "compare" );
我能做些什么来实现这一点?使用:
usort()
是一个PHP固有的函数,用于排序PHP数组。它可以用来帮助你
首先,为了使用usort()
,您需要一个数组,因此您需要首先将数据推入数组,而不是将其推入字符串
设置阵列:
这部分很简单。您只需初始化一个数组,并使用
按如下方式启动脚本:
$data = file( "myfile.csv" );
$first_dimension = array();
$second_dimension = array();
for($i = 1; $i < count ( $data ); $i ++)
{
$info1 = str_getcsv( $data[ $i ], "," , '' );
$second_dimension = array( $info1[4], $info1[6], $info1[7], $info1[2], $info1[10] );
array_push( $first_dimension, $second_dimension );
}
剖析此比较器:
在这个比较器中,我们将并排比较$first\u dimension
中的两行,并确定其中一行应该在另一行之前还是之后
我们通过从该行获取日期(第3列)和时间(第4列)来实现这一点
然后,我们使用PHP的函数来比较每一次
注意:date\u diff()
要求参数为php日期对象;我们用这个函数创建它们
排序方式:
实施:
mark,mark,456345,5/10/2016,9:00 AM
mordl,mordl,23564,5/10/2016,1:00 PM
corten,corten,3216589,5/10/2016,12:00 PM
jack,jack,123645,5/10/2016,8:00 AM
olemn,olemn,29845155,5/10/2016,2:00 PM
jab,jab,457362,5/10/2016,10:45 AM
monk,monk,326251,5/10/2016,3:00 PM
jack,jack,123645,5/10/2016,8:00 AM
mark,mark,456345,5/10/2016,9:00 AM
jab,jab,457362,5/10/2016,10:45 AM
corten,corten,3216589,5/10/2016,12:00 PM
mordl,mordl,23564,5/10/2016,1:00 PM
olemn,olemn,29845155,5/10/2016,2:00 PM
monk,monk,326251,5/10/2016,3:00 PM
usort( $first_dim, "compare" );
将数组转储为字符串:
要转储内容,只需使用PHP的本机函数将每行的元素连接成一个字符串,每个元素用逗号分隔
var $string = "";
for($i = 1; $i < count ( $first_dimension ); $i ++)
{
$string .= implode( ",", $first_dimension[$i] );
$string .= "\n"
}
var$string=”“;
对于($i=1;$i
使用:
usort()
是一个PHP固有的函数,用于排序PHP数组。它可以用来帮助你
首先,为了使用usort()
,您需要一个数组,因此您需要首先将数据推入数组,而不是将其推入字符串
设置阵列:
这部分很简单。您只需初始化一个数组,并使用
按如下方式启动脚本:
$data = file( "myfile.csv" );
$first_dimension = array();
$second_dimension = array();
for($i = 1; $i < count ( $data ); $i ++)
{
$info1 = str_getcsv( $data[ $i ], "," , '' );
$second_dimension = array( $info1[4], $info1[6], $info1[7], $info1[2], $info1[10] );
array_push( $first_dimension, $second_dimension );
}
剖析此比较器:
在这个比较器中,我们将并排比较$first\u dimension
中的两行,并确定其中一行应该在另一行之前还是之后
我们通过从该行获取日期(第3列)和时间(第4列)来实现这一点
然后,我们使用PHP的函数来比较每一次
注意:date\u diff()
要求参数为php日期对象;我们用这个函数创建它们
排序方式:
实施:
mark,mark,456345,5/10/2016,9:00 AM
mordl,mordl,23564,5/10/2016,1:00 PM
corten,corten,3216589,5/10/2016,12:00 PM
jack,jack,123645,5/10/2016,8:00 AM
olemn,olemn,29845155,5/10/2016,2:00 PM
jab,jab,457362,5/10/2016,10:45 AM
monk,monk,326251,5/10/2016,3:00 PM
jack,jack,123645,5/10/2016,8:00 AM
mark,mark,456345,5/10/2016,9:00 AM
jab,jab,457362,5/10/2016,10:45 AM
corten,corten,3216589,5/10/2016,12:00 PM
mordl,mordl,23564,5/10/2016,1:00 PM
olemn,olemn,29845155,5/10/2016,2:00 PM
monk,monk,326251,5/10/2016,3:00 PM
usort( $first_dim, "compare" );
将数组转储为字符串:
要转储内容,只需使用PHP的本机函数将每行的元素连接成一个字符串,每个元素用逗号分隔
var $string = "";
for($i = 1; $i < count ( $first_dimension ); $i ++)
{
$string .= implode( ",", $first_dimension[$i] );
$string .= "\n"
}
var$string=”“;
对于($i=1;$i
请在提问之前多做些校对……我回答了您的问题。请在提问之前多做些校对……我回答了您的问题。谢谢您的回答,我确实做了您所做的事情,但我没有得到任何结果,我不知道我为什么会发现问题,我更改此行$first\u dimension=array\u push($first\u dimension,$second\u dimension);向该数组推送($first\u dimension,$second\u dimension);谢谢你的工作now@ajack没问题,我会用bug Fixer更新我的答案谢谢你的回复,我确实做了你所做的,但我没有得到任何结果,我不知道我是怎么发现问题的,我更改了这行$first\u dimension=array\u push($first\u dimension,$second\u dimension);向该数组推送($first\u dimension,$second\u dimension);谢谢你的工作now@ajack没问题,我会用错误修正更新我的答案