根据来自 REST API 调用的多个条件进行排序和过滤
Sort and filter based on multiple criteria from REST API call
我想根据多个条件对从 API 调用中收到的数据进行排序,然后对其进行过滤以在 2 个不同的 table 中显示数据。
这是我现在对数据进行排序的代码,在 1) machine->id,2) date,3) ordering。
function cmp($a, $b)
{
if (strtotime($a->date) == strtotime($b->date)){
return $a->ordering - $b->ordering;
}
if ($a->machine->id == $b->machine->id) {
return strtotime($a->date) - strtotime($b->date);
}
return strcmp($a->machine->id, $b->machine->id);
}
usort($obj, "cmp");
之后,我仅过滤具有特定机器的数据->id 以在 table:
中显示该数据
$machine1 = array_filter($obj, function($object){
return ($object->machine->id == 1141);
});
和
$machine2 = array_filter($obj, function($object){
return ($object->machine->id == 1259);
});
现在 machine1 的 table 中的数据如下所示,日期排序不正常:
2018-11-26T23:00:00Z - ordering: 1
2018-11-26T23:00:00Z - ordering: 3
2018-11-27T23:00:00Z - ordering: 2
2018-11-27T23:00:00Z - ordering: 3
2018-11-27T23:00:00Z - ordering: 4
2018-11-27T23:00:00Z - ordering: 5
2018-11-25T23:00:00Z - ordering: 1
2018-11-25T23:00:00Z - ordering: 2
2018-11-26T23:00:00Z - ordering: 2
2018-11-27T23:00:00Z - ordering: 1
2018-11-25T23:00:00Z - ordering: 3
2018-11-25T23:00:00Z - ordering: 4
2018-11-25T23:00:00Z - ordering: 5
2018-11-25T23:00:00Z - ordering: 6
2018-11-25T23:00:00Z - ordering: 7
2018-11-25T23:00:00Z - ordering: 8
2018-11-25T23:00:00Z - ordering: 9
2018-11-25T23:00:00Z - ordering: 10
2018-11-25T23:00:00Z - ordering: 11
2018-11-26T23:00:00Z - ordering: 4
2018-11-26T23:00:00Z - ordering: 5
2018-11-26T23:00:00Z - ordering: 6
2018-11-26T23:00:00Z - ordering: 7
2018-11-26T23:00:00Z - ordering: 8
2018-11-26T23:00:00Z - ordering: 9
2018-11-26T23:00:00Z - ordering: 10
2018-11-26T23:00:00Z - ordering: 11
2018-11-26T23:00:00Z - ordering: 12
2018-11-26T23:00:00Z - ordering: 13
2018-11-26T23:00:00Z - ordering: 14
2018-11-26T23:00:00Z - ordering: 15
2018-11-26T23:00:00Z - ordering: 16
我做错了什么?
发生这种情况是因为您在比较函数中使用了机器 ID,但在过滤了不同的机器之后。
想想案例:
1. time = 2015, id = 3, order 2
2. time = 2016, id = 4, order 3
3. time = 2013, id = 3, order 3
当比较 1 和 2 顺序时保持不变,但在 2 和 3 上它们交换,因为 ID
但是 n 你会在 3 之前得到 1,这对你来说是错误的顺序(日期......)
我建议首先像您所做的那样为机器数组拆分大数组:
$machine1141 = array_filter($obj, function($object){
return ($object->machine->id == 1141);
});
然后使用比较函数:
function cmp($a, $b)
{
if (strtotime($a->date) == strtotime($b->date))
return $a->ordering - $b->ordering;
return strtotime($a->date) - strtotime($b->date);
}
usort($machine1141, "cmp");
希望对您有所帮助!
我想根据多个条件对从 API 调用中收到的数据进行排序,然后对其进行过滤以在 2 个不同的 table 中显示数据。
这是我现在对数据进行排序的代码,在 1) machine->id,2) date,3) ordering。
function cmp($a, $b)
{
if (strtotime($a->date) == strtotime($b->date)){
return $a->ordering - $b->ordering;
}
if ($a->machine->id == $b->machine->id) {
return strtotime($a->date) - strtotime($b->date);
}
return strcmp($a->machine->id, $b->machine->id);
}
usort($obj, "cmp");
之后,我仅过滤具有特定机器的数据->id 以在 table:
中显示该数据$machine1 = array_filter($obj, function($object){
return ($object->machine->id == 1141);
});
和
$machine2 = array_filter($obj, function($object){
return ($object->machine->id == 1259);
});
现在 machine1 的 table 中的数据如下所示,日期排序不正常:
2018-11-26T23:00:00Z - ordering: 1
2018-11-26T23:00:00Z - ordering: 3
2018-11-27T23:00:00Z - ordering: 2
2018-11-27T23:00:00Z - ordering: 3
2018-11-27T23:00:00Z - ordering: 4
2018-11-27T23:00:00Z - ordering: 5
2018-11-25T23:00:00Z - ordering: 1
2018-11-25T23:00:00Z - ordering: 2
2018-11-26T23:00:00Z - ordering: 2
2018-11-27T23:00:00Z - ordering: 1
2018-11-25T23:00:00Z - ordering: 3
2018-11-25T23:00:00Z - ordering: 4
2018-11-25T23:00:00Z - ordering: 5
2018-11-25T23:00:00Z - ordering: 6
2018-11-25T23:00:00Z - ordering: 7
2018-11-25T23:00:00Z - ordering: 8
2018-11-25T23:00:00Z - ordering: 9
2018-11-25T23:00:00Z - ordering: 10
2018-11-25T23:00:00Z - ordering: 11
2018-11-26T23:00:00Z - ordering: 4
2018-11-26T23:00:00Z - ordering: 5
2018-11-26T23:00:00Z - ordering: 6
2018-11-26T23:00:00Z - ordering: 7
2018-11-26T23:00:00Z - ordering: 8
2018-11-26T23:00:00Z - ordering: 9
2018-11-26T23:00:00Z - ordering: 10
2018-11-26T23:00:00Z - ordering: 11
2018-11-26T23:00:00Z - ordering: 12
2018-11-26T23:00:00Z - ordering: 13
2018-11-26T23:00:00Z - ordering: 14
2018-11-26T23:00:00Z - ordering: 15
2018-11-26T23:00:00Z - ordering: 16
我做错了什么?
发生这种情况是因为您在比较函数中使用了机器 ID,但在过滤了不同的机器之后。
想想案例:
1. time = 2015, id = 3, order 2
2. time = 2016, id = 4, order 3
3. time = 2013, id = 3, order 3
当比较 1 和 2 顺序时保持不变,但在 2 和 3 上它们交换,因为 ID
但是 n 你会在 3 之前得到 1,这对你来说是错误的顺序(日期......)
我建议首先像您所做的那样为机器数组拆分大数组:
$machine1141 = array_filter($obj, function($object){
return ($object->machine->id == 1141);
});
然后使用比较函数:
function cmp($a, $b)
{
if (strtotime($a->date) == strtotime($b->date))
return $a->ordering - $b->ordering;
return strtotime($a->date) - strtotime($b->date);
}
usort($machine1141, "cmp");
希望对您有所帮助!