gpt4 book ai didi

php - 如何对具有软件版本号的表中的列进行排序?

转载 作者:行者123 更新时间:2023-11-28 01:14:14 27 4
gpt4 key购买 nike

我的表中有一列是动态生成的。表格有名称、公司等列,它还有包含版本号(1.14.0.2、1.12.1.0、1.8.0.1)的列。

我正在使用名为 Sortable 的库用于就地排序。这是一个很棒的库,开箱即用!

它适用于名称和公司等列。但在某些情况下,版本号会失败。我将数据值设置为

的结果
str_replace('.','',$version_number)

但当版本号为 1.10.0、1.14、1.0.1.2 时失败(特例)

应该是这样的

1.0.1.2
1.10.0
1.14

但是有点像

1.14
1.0.1.2
1.10.0

有什么方法可以获得正确的结果?

最佳答案

这样排序是因为它按数据值排序,您将其设置为不带句点的数字。

1.14      --> 114  (smallest)
1.0.1.2 --> 1012
1.10.0 --> 1100 (largest)

如果您不存在 data-value 属性,或者在版本号中保留句点,它将正确排序。如下面的 fiddle 所示。

https://jsfiddle.net/t7xhkkjc/

编辑

需要添加自定义排序函数才能正确排序版本号

// Credit for function http://stackoverflow.com/a/7717160/769237
var customTypes = [{
name: 'version',
defaultSortDirection: 'descending',
match: function(a) {
return a.match(/([1-9]+\.?)+/g);
},
compare: function (a, b) {
var i, cmp, len, re = /(\.0)+[^\.]*$/;
a = (a + '').replace(re, '').split('.');
b = (b + '').replace(re, '').split('.');
len = Math.min(a.length, b.length);
for( i = 0; i < len; i++ ) {
cmp = parseInt(a[i], 10) - parseInt(b[i], 10);
if( cmp !== 0 ) {
return cmp;
}
}
return a.length - b.length;
}
}];

这样你就不会因为覆盖它们而丢失原来的排序类型

var customAndOriginalTypes = Sortable.types.concat(customTypes);

Sortable.setupTypes(customAndOriginalTypes);

此外,您需要通过从表中删除 data-sortable 来禁用自动初始化。这允许您在向表格添加排序功能之前添加新的排序类型。

然后您可以使用

初始化表格上的排序
var yourTable = document.querySelector('#your-table');

Sortable.initTable(yourTable);

https://jsfiddle.net/p4w5bup3/

关于php - 如何对具有软件版本号的表中的列进行排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36392236/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com