我的输入如下:
array
0 =>
array
'task_uid' => '10214'
'createdate' => '2012-04-18 09:47:40'
'task_id' => '92966'
1 =>
array
'task_uid' => '10214'
'createdate' => '2012-04-18 09:47:40'
'task_id' => '92967'
我必须以稳定的方式创建它。 我创建了这个函数:
function compareTime($a, $b) {
$a_timestamp = strtotime($a["createdate"]);
$b_timestamp = strtotime($b["createdate"]);
if ($a_timestamp > $b_timestamp)
return -1;
else if ($a_timestamp < $b_timestamp)
return 1;
else
return 0;
//return strcmp($a["createdate"], $b["createdate"]);
}
和
usort($input, array( $this, "compareTime"));
它应该从最旧到最新排序但是这个混合数据。此外,如果datacreate相同,则不更改位置。 但是,如果我在compareTime中使用:
return strcmp($a["createdate"], $b["createdate"]);
然后它从示例中更改元素(对我来说这是错误的)。你能否回答我应该如何分类输入?
答案 0 :(得分:1)
function cmp($a, $b)
{
$a = strtotime($a['createdate']);
$b = strtotime($b['createdate']);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
usort($input, "cmp");
print_r($input);
输出(最旧到最新)
Array
(
[0] => Array
(
[task_uid] => 10214
[createdate] => 2012-04-18 09:47:40
[task_id] => 92967
)
[1] => Array
(
[task_uid] => 10214
[createdate] => 2012-04-19 09:47:40
[task_id] => 92966
)
[2] => Array
(
[task_uid] => 9999
[createdate] => 2012-04-22 09:47:40
[task_id] => 9999
)
)
<强> Codepad demo 强>
如果您想在课程中进行排序,例如使用类的方法进行比较,可以这样做:
class MyTest
{
public function __construct()
{
$input = array(
0 =>
array(
'task_uid' => '10214',
'createdate' => '2012-04-19 09:47:40',
'task_id' => '92966'),
1=> array(
'task_uid' => '9999',
'createdate' => '2012-04-22 09:47:40',
'task_id' => '9999'),
2 =>
array(
'task_uid' => '10214' ,
'createdate' => '2012-04-18 09:47:40' ,
'task_id' => '92967' )
);
usort($input, array($this, "cmp"));
print_r($input);
}
public function cmp($a, $b)
{
$a = strtotime($a['createdate']);
$b = strtotime($b['createdate']);
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
}
$obj = new MyTest();
输出与第一个示例相同。