在PHP中将数组格式化为按指定的unix时间戳排序
我有一个数组,它的时间戳始终在[3]上(下面是数组数据的一个示例) 我希望使用时间戳对数组进行排序。我看到一些stackoverflow帖子显然使用了两种方法来实现这一点,在PHP中将数组格式化为按指定的unix时间戳排序,php,arrays,Php,Arrays,我有一个数组,它的时间戳始终在[3]上(下面是数组数据的一个示例) 我希望使用时间戳对数组进行排序。我看到一些stackoverflow帖子显然使用了两种方法来实现这一点,array\u multisort()和usort(),但我无法复制这两种方法。 以下是我根据自己的代码所做的尝试: 尝试1-我将数组传递给usort,然后尝试用foreach将其拆分。应用此方法肯定会更改结果的顺序,但日期似乎没有特定的顺序(升序、降序) 我的理论是它没有正确处理unix时间戳,我不确定我能做些什么。去掉时间
array\u multisort()
和usort()
,但我无法复制这两种方法。以下是我根据自己的代码所做的尝试: 尝试1-我将数组传递给usort,然后尝试用foreach将其拆分。应用此方法肯定会更改结果的顺序,但日期似乎没有特定的顺序(升序、降序) 我的理论是它没有正确处理unix时间戳,我不确定我能做些什么。去掉时间戳的所有字符使其成为一行简单的数字(2014-01-02 03:02:12变为20140102030212)是否明智?或者有没有其他方法可以用当前形式的时间戳来处理它 以下是阵列中数据的示例:
Array
(
[0] => Array
(
[uid] => 20013
[0] => 20013
[username] => myhipswontlie
[1] => myhipswontlie
[rating] => 4.00
[2] => 4.00
[datetime] => 2014-01-27 23:40:56
[3] => 2014-01-27 23:40:56
[type] => rated
[4] => rated
)
[1] => Array
(
[uid] => 20025
[0] => 20025
[username] => brasilchika
[1] => brasilchika
[rating] => 4.00
[2] => 4.00
[datetime] => 2014-01-02 03:02:12
[3] => 2014-01-02 03:02:12
[type] => rated
[4] => rated
)
[2] => Array
(
[uid] => 10002
[0] => 10002
[username] => crtten
[1] => crtten
[datetime] => 2014-01-25 01:33:34
[2] => 2014-01-25 01:33:34
[type] => visits
[3] => visits
)
)
您的问题是您的数字键在数组中似乎不匹配。有时在第三个键中可以找到datetime,有时在第二个键中可以找到datetime(这很奇怪,因为它们看起来像来自
mysql\u fetch\u array()
,这将形成统一的数组)
要解决此问题,应改用关联数组键:
function sortArray($a1, $a2){
if ($a1['datetime'] == $a2['datetime']) return 0;
return ($a1['datetime'] > $a2['datetime']) ? -1 : 1;
}
usort($the_array, "sortArray");
啊,我甚至没注意到这让我兴奋。我现在意识到正在发生的事情,一些结果的评级正在改变。非常感谢你。
Array
(
[0] => Array
(
[uid] => 20013
[0] => 20013
[username] => myhipswontlie
[1] => myhipswontlie
[rating] => 4.00
[2] => 4.00
[datetime] => 2014-01-27 23:40:56
[3] => 2014-01-27 23:40:56
[type] => rated
[4] => rated
)
[1] => Array
(
[uid] => 20025
[0] => 20025
[username] => brasilchika
[1] => brasilchika
[rating] => 4.00
[2] => 4.00
[datetime] => 2014-01-02 03:02:12
[3] => 2014-01-02 03:02:12
[type] => rated
[4] => rated
)
[2] => Array
(
[uid] => 10002
[0] => 10002
[username] => crtten
[1] => crtten
[datetime] => 2014-01-25 01:33:34
[2] => 2014-01-25 01:33:34
[type] => visits
[3] => visits
)
)
function sortArray($a1, $a2){
if ($a1['datetime'] == $a2['datetime']) return 0;
return ($a1['datetime'] > $a2['datetime']) ? -1 : 1;
}
usort($the_array, "sortArray");