Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/402.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何按加载的顺序对值列表进行排序?_Php_Javascript_Associative Array_Mootools Sortable - Fatal编程技术网

Php 如何按加载的顺序对值列表进行排序?

Php 如何按加载的顺序对值列表进行排序?,php,javascript,associative-array,mootools-sortable,Php,Javascript,Associative Array,Mootools Sortable,应用程序 您有一个从1到n的项目列表,您希望用户将其从n到1进行排序。每个项目都有一个到期日。项目1的到期日最近,项目n的到期日最近。您希望用户在项目到期日之前按其所需的排名顺序对项目进行排名/排序。您不希望用户能够在到期日过后对项目进行排名/排序,但仍然希望显示所有项目及其排序 要将到期项目与过期项目分开,请将它们加载到两个单独的表中 --项目到期表:顶部的表只保存用户可以排序的到期项目。顺序是按降序排列的。(排名顺序是下面JSFIDLE示例中的可见数字) --过期项目表:底部表格保存用户无法

应用程序 您有一个从1到n的项目列表,您希望用户将其从n到1进行排序。每个项目都有一个到期日。项目1的到期日最近,项目n的到期日最近。您希望用户在项目到期日之前按其所需的排名顺序对项目进行排名/排序。您不希望用户能够在到期日过后对项目进行排名/排序,但仍然希望显示所有项目及其排序

要将到期项目与过期项目分开,请将它们加载到两个单独的表中

--项目到期表:顶部的表只保存用户可以排序的到期项目。顺序是按降序排列的。(排名顺序是下面JSFIDLE示例中的可见数字)

--过期项目表:底部表格保存用户无法再排序的过期项目。一旦某个项目过期并进入此表,它将保留以前保存的排名。订单处于项目订单计数状态。与截止日期订单升序相同

示例假设您有一个包含十项的列表,希望用户对其进行排名。在任何项目过期之前,只有项目到期表显示如下:这里列出了项目1-10,到期日升序(到期日未显示)。屏幕上显示的数字按降序排列

项目到期表中的排名始终按降序排列,以便用户可以将项目上移到较高的置信度或下移到较低的置信度。等级计数将始终与项目计数匹配,但它们以相反的开始。例如,项目1将以排名位置10(在顶部)和排名位置1(在底部)的项目10开始

一旦项目过期,底部表格将显示并保存这些过期项目。假设用户对项目进行了排序并保存了它们,其中一半过期了。您可能会让这些表像这样显示,请注意,底部的表按该顺序保存项目1到5。这是因为底部表格按项目顺序升序排列,这与截止日期升序相同。还请注意,用户已将项目4和5排序为10和6。在对到期物料表重新排序时,不能再使用这些排名位置

过期项目示例这里jsfiddle.net/jpl1618/Y4tjJ/I应该能够将项目8(位于位置5)向上移动一个位置到位置7,从而将项目10(位于位置7)向下移动到位置5。因此,您将得到以下结果:

item 9 => rank 9
item 6 => rank 8
item 8 => rank 7
item 10 => rank 5
item 7 => rank 4
或者我应该能够将项目8一直移动到位置9的顶部,这会将项目9、6、10向下移动一个位置。那么你会:

item 8 => rank 9
item 9 => rank 8
item 6 => rank 7
item 10 => rank 5
item 7 => rank 4
请注意,无论项目顺序如何,排名顺序都保持相同的降序

问题如何更改当前JS代码,以允许用户在items due表中对项目进行排序/排序,该表按降序保存加载的排名位置?在示例中,排名顺序应始终显示9,8,7,5,4,但项目可以移动到这些位置

count = 5
countL = 5

L stands for locked

另一个小问题:为什么在单击向下排序时表格行会切换颜色?当点击一行时,我怎么能使该行不闪烁为另一种颜色?

我认为如果n是一个小数字,我们可以假设O(n^2)解决方案是可以的

因此,您可以使用映射函数构建索引映射:

var myIndexMap = actualyUserdSortedArray.map( function (x) { 
                           return originalArray.indexOf(x); 
                 } );
构建此索引映射后,您可以使用此映射按用户定义的顺序访问阵列原始阵列:

 var ithItem =  originalArray[myIndexMap[i]];
基于这个想法,我修改了你的小提琴,你可以在这里看到: 我添加了第一行来显示当前的映射数组,它是在每次订单更改时重新构建的

编辑:考虑到您所寻求的行为的相对复杂性,我宁愿选择一种更面向代码的方法来实现这一点。您需要为每个项目处理4个信息:id(1-n)、isLocked(真/假)、dueDate(日期)、userOrder(1-c,其中c是非锁定计数)。 那么上面的列表是 AllItems.filter(函数(x){return x.isLocked}) .sort(函数(a,b){return(a.userOrder-b.userOrder)}); 下面的列表是 filter(函数(x){return!x.isLocked})

因为事情很快就会变得更复杂:从某种永久性存储(localStorage或服务器文件)加载列表后,如果JSON是简单的js对象,可能会更简单。
然后您将有3个事件要处理。 1) 您必须不时检查是否存在未锁定的事件(如果它们已过期)。如果已过一次,则将所有已过的userOrder增加一次。
2) 在项目过期之前,必须有某种方式“使用”项目,否则用户对项目排序没有兴趣。如果项目现在使用,则应将其设置为锁定。userOrder的更新与1)中的相同。 3) 然后,您必须处理已排序的已更改事件,以更新已解锁项目的usedOrder


祝你好运。

我不明白你的排序问题,但切换颜色是在css中定义的。有
背景色:#F9F9F9
下一步是
每隔第n行获取透明背景
顶部表格从数组中加载将来有到期日期的项目。一旦一个项目的到期日过期,它就会在第二个不可排序的表中加载保存的值。在到期项目表中,编号为9、8、7、5、4,这是未到期的项目。我想在保持数字9,8,7,5,4的同时对这个顶部表格进行排序。例如,项目8以5的顺序加载,但当它向上移动一个位置时,它应该以7的顺序加载。对于行颜色,我应该更好地解释。为什么当你点击这一行的时候它会改变颜色?你让它工作了吗?文森特,谢谢你的回答。我认为它更接近我所需要的,除了我的目标是让数字在排序后按相反的时间顺序显示。这种行为的结果应该是