php - 尝试对包含多个字符串的列进行排序(我的雇主有一些限制)
问题描述
我在按照雇主希望我的方式对表格列进行排序时遇到一些问题。首先,我使用 If case 和“数据顺序”值对该列进行排序,但我被告知我不应该使用硬编码数字,因为可能存在“大数字问题”或类似的事情。现在我正在寻找另一种解决方案,但我似乎被卡住了:
这是一个有 5 列的表,其中三列中有一对两个数据库字符串。
列是:
“类型” | “工作清单” | “任务名称/任务描述” | “在运行时间/间隔之后” | “下一个到期日期/运行时间”
现在我应该让“After Running hours/Interval”列可排序,结果应该首先显示:每个条目实际上都有一个“After Running hours”条目,升序,其余的应该按间隔长度排序(间隔可以是x day(s), x week(s), x month(s), x year(s) 和两个条目(Interval 和 Running hours)可能是空的,这些情况应该在底部。目前代码如下所示在正确运行时间后排序,但之后它会持续 1 个月 -> 1 周 -> 1 年 -> 2 个月等等。我希望有人能给我一个提示为了解决这个问题,也许使用 {{}} 的隐藏输入可以将天/周/月/年调整为正确的顺序。
@if($task->worklistTask->running_hours)
{{$task->worklistTask->running_hours . " h"}} <br>
@if($task->worklistTask->interval && $task->worklistTask->intervalunit)
{{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }}
@else {{"-"}}
@endif
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && ($task->worklistTask->intervalunit->name == 'day(s)'))
{{"-"}} <br> {{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }}
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && ($task->worklistTask->intervalunit->name == 'week(s)'))
{{"-"}} <br> {{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }}
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && ($task->worklistTask->intervalunit->name == 'month(s)'))
{{"-"}} <br> {{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }}
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && ($task->worklistTask->intervalunit->name == 'year(s)'))
{{"-"}} <br> {{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }}
@else {{"-"}} <br> {{"-"}}
@endif
</td>
示例表
类型 | 工作清单 | TaskN./TaskDes. | ARH 诠释。 |
Nextdue/ iRH |
---|---|---|---|---|
默认 | WLName1 | 任务1/任务材料 | 100 小时 1 年 |
-/- |
默认 | WLName3 | 任务4/任务材料 | 150小时 - |
-/- |
批判的 | WLName3 | 任务5/任务材料 | 200 小时 1 周 |
-/- |
默认 | WLName1 | 任务2/任务材料 | - 1 个月 |
-/- |
索拉斯 | WLName2 | 任务 3/Taskstuff | - 1 周 |
-/- |
默认 | WLName4 | 任务6/Taskstuff | - 2 个月 |
-/- |
我们使用 js-table 插件。类型和工作列表完全没有问题(按标题,它会正确排序)“TaskN./TaskDes”。仅按字母顺序对任务名称进行排序,但这对客户来说似乎没有问题。Next due 不能按“inRunningHours”排序,但现在这也不是问题。对 ARH/Int 进行排序。(“运行时间之后”/“间隔”)此刻列正确地对运行时间进行升序排序。之后事情就乱套了。他仍然按字母顺序对“字符串的其余部分”进行排序(没有运行时间值的所有内容都会得到一个“-”,但我需要在间隔长度之后对它们进行排序。
以前的版本是不需要的,现在我正在寻找一个新的解决方案。以前的解决方案:
<td data-order="@if($task->worklistTask->running_hours){{ $task->worklistTask->running_hours }}
@elseif (!empty($task->worklistTask->interval) && $task->worklistTask->intervalunit->name == 'day(s)') {{50000 + $task->worklistTask->interval * 1}}
@elseif (!empty($task->worklistTask->interval) && $task->worklistTask->intervalunit->name == 'week(s)') {{50000 + $task->worklistTask->interval * 7}}
@elseif (!empty($task->worklistTask->interval) && $task->worklistTask->intervalunit->name == 'month(s)') {{50000 + $task->worklistTask->interval * 30}}
@elseif (!empty($task->worklistTask->interval) && $task->worklistTask->intervalunit->name == 'year(s)') {{50000 + $task->worklistTask->interval * 365}}
@else 999999 @endif">
仍在尝试解决堆栈溢出问题。这只是我第三次在这里发帖。我将尝试改进我的问题的格式。
EDIT2:这(乍一看)似乎符合预期。数据表通常按字母顺序排序,使用此解决方案,我可以按意图进行排序,而无需用户看到我生成的用于对表进行排序的字符串。现在所有运行时间都将在表格顶部,按升序排序“a12345a”,之后所有获得间隔的内容将按间隔长度“b[Intervalindays]b”排序,之后所有没有条目的这两个类别应该列出来。使用 span class=d-none 事物是不可见的,但数据表仍会按字母顺序对字符串进行排序。
<td>
//check if Interval and Running hour entry are available
@if($task->worklistTask->interval && $task->worklistTask->intervalunit && $task->worklistTask->running_hours)
<span class="d-none"> {{ "a" }} {{ $task->worklistTask->running_hours }} {{ "a" }} </span> {{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }} <br> {{ $task->worklistTask->running_hours}} {{" h"}}
//check if interval entries are available but no running hour entries (depending on interval case)
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && $task->worklistTask->intervalunit->name == 'day(s)')
<span class="d-none"> {{ "b" }} {{ $task->worklistTask->interval*1 }} {{ "b" }}</span>{{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }} <br> {{"-"}}
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && $task->worklistTask->intervalunit->name == 'week(s)')
<span class="d-none"> {{ "b" }} {{ $task->worklistTask->interval*7 }} {{ "b" }} </span>{{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }} <br> {{"-"}}
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && $task->worklistTask->intervalunit->name == 'month(s)')
<span class="d-none"> {{ "b" }} {{ $task->worklistTask->interval*30 }} {{ "b" }} </span>{{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }} <br> {{"-"}}
@elseif($task->worklistTask->interval && $task->worklistTask->intervalunit && $task->worklistTask->intervalunit->name == 'year(s)')
<span class="d-none"> {{ "b" }} {{ $task->worklistTask->interval*360 }} {{ "b" }} </span>{{ $task->worklistTask->interval }} {{ $task->worklistTask->intervalunit->name }} <br> {{"-"}}
//check if there is a running hours entry but no interval entry
@elseif($task->worklistTask->running_hours)
<span class="d-none"> {{ "a" }} {{ $task->worklistTask->running_hours }} {{ "a" }} </span>{{ "-" }} <br> {{$task->worklistTask->running_hours}} {{" h"}}
//default if none of the ifs and elseifs fit
@else
<span class="d-none"> {{ "c" }} </span> {{ "-" }} <br> {{ "-" }}
@endif
</td>
没有大的硬编码数字,事情似乎排序正确。希望我不会错过一些明显的东西,它们会把整个事情分解成碎片。
解决方案
推荐阅读
- sql - 如何使用 Regexp_replace 删除模式字符串
- ldap - Keycloak 中根据不同的 LDAP 用户联合分配不同的默认用户组
- swift - 更改 DJIVideoPreviewer 的 Buffer 格式
- c# - 响应 Wcf Rest -Get C# 的未知错误
- jquery - 如何在另一个函数中实现tilt.js jquery destroy方法
- java - java中对象消耗的内存
- java - 为 Spring JPA 存储库方法配置切入点
- java - “查看”不可变对象特殊情况的最佳模式
- google-apps-script - 如何使用 Apps 脚本在不打开新选项卡或浏览器窗口的情况下打开过滤器视图
- java - 如何在 JPA 中选择一列并按此列分组?