Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/415.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/250.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或Javascript的最佳实践?_Javascript_Php_Ajax_Arrays_Sorting - Fatal编程技术网

排序数组、PHP或Javascript的最佳实践?

排序数组、PHP或Javascript的最佳实践?,javascript,php,ajax,arrays,sorting,Javascript,Php,Ajax,Arrays,Sorting,因此,我已经做了很多关于这个特定主题的研究,但我仍然发现自己对最佳方法有些困惑。我的问题有两个部分 1.)基本上,我的页面访问的是一个MySQL音乐数据库,该数据库保存了特定艺术家的整个唱片。实际上有1000个项目。页面的功能是显示所有项目,并按数组中的特定值(用户从预定义列表中选择)对其进行排序,如标题、发布日期、目录号、类别等 据我所知,有两种方法可以实现显示和排序。一旦用户加载页面,PHP可以立即输出discography数组,将其回送到javascript对象中,然后在用户单击按钮后使用

因此,我已经做了很多关于这个特定主题的研究,但我仍然发现自己对最佳方法有些困惑。我的问题有两个部分

1.)基本上,我的页面访问的是一个MySQL音乐数据库,该数据库保存了特定艺术家的整个唱片。实际上有1000个项目。页面的功能是显示所有项目,并按数组中的特定值(用户从预定义列表中选择)对其进行排序,如标题、发布日期、目录号、类别等

据我所知,有两种方法可以实现显示和排序。一旦用户加载页面,PHP可以立即输出discography数组,将其回送到javascript对象中,然后在用户单击按钮后使用javascript进行排序

在用户单击一个按钮后,我可以使用AJAX发送用户希望对所有项目进行排序的值,使用PHP**或数据库服务器排序,如ORDER by**进行排序并以JSON格式输出数组。例如,按pagename排序的数组如下所示:

var discography = [
    {"id":"1",
     "pagename":"item100001",
     "category":"Albums",
     "Label":"Atlantic",
     "title":"Awesome Album",
     "date":"July 2, 1998",
     "country":"United States",
     "catalog":"666 3333 44444",
     "format":"CD"},
    {"id":"12",
     "pagename":"item100002",
     "category":"Albums",
     "Label":"Epic",
     "title":"Fun Music",
     "date":"January 22, 1992",
     "country":"United Kingdom",
     "catalog":"333 4444 5555",
     "format":"Cassette"},
      {"id":"3",
     "pagename":"item100003",
     "category":"Single",
     "Label":"Atlantic",
     "title":"Cool Single",
     "date":"October 12, 1988",
     "country":"United States",
     "catalog":"444 5555 66666",
     "format":"CD"}
    ];
然后,我可以通过jquery对其进行操作,将其输出为html并在页面上显示项目

用户应该能够按照他们想要的任何值对项目进行排序和重新排序,而不仅仅是一次

也许这个问题过于简化了前提,但哪种方法更智能、更快、更有效?服务器端排序(使用AJAX并作为JSON输出)还是Javascript?如果是服务器端,我相信我会知道如何编写函数来正确排序数据

但是如果答案是Javascript,那就引出我的第二个问题

2.)我已经说过了,但我一直在读关于Javascript中“稳定”排序与不稳定排序的问题。这个问题是否适用?我绝对需要在所有浏览器中保持一致,但是,由于我需要按特定字段(类别、日期等)进行排序,因此我需要一些关于如何使函数适应我的目的的指导。但如果我可以在没有合并排序的情况下进行安全、一致的排序,那么我就这样做


如果你读到这里,我很感激。欢迎任何帮助

很难说什么是正确的方法。 我更喜欢javascript解决方案,因为它在服务器上产生的流量更少

使用array.sort()可以通过传递比较函数获得对对象数组进行排序所需的所有信息

如果函数返回1,则假定a大于b,-1表示a小于b,0表示它们相等


如果有很多项目,Javascript可能会冻结您的屏幕。在这种情况下,有两种选择。重新处理服务器上的所有内容或使用WebWorker进行排序。

为什么不在数据库服务器中对列表进行排序?您可能需要在实际操作中对此进行测试。客户机上的排序消除了到服务器的往返和数据传输。在服务器上进行排序,特别是在数据库进行排序时,排序速度可能更快,但需要往返和数据传输。哪个更好取决于要排序和传输的数据量、互联网连接的速度以及您对用户数据上限的关注程度。排序稳定性问题不是问题。无论如何,您都需要编写自己的比较器,所以只要给它一些逻辑,就可以知道如何打破平局。如果相册的名称相同,则使用数据库ID、日期或其他信息,具体取决于具体情况。如果要对客户机上的查询和视图进行分页,那么基本上必须在数据库服务器中进行排序,因为只有它知道所有行。如果你的列表很短,而且总是完整地显示出来,那么你可以在客户端安全地进行排序。单页上有5000个项目是很难管理的,您可能希望将其减少到每页最多50个,并为用户提供额外的过滤器以缩小其范围。
因为它在服务器上产生的流量较少。
-这取决于数据集的大小。如果您有1000个项目的池,页面大小为20,则服务器端的排序+分页将减少流量,除非有人单击排序/分页链接超过50次。没错。我认为交通不是正确的术语。您喜欢加载还是计算时间?另外,如果我对这个场景不太了解的话,也没什么好说的。@Bellian谢谢你,我也很担心冰冻。如果我使用Javascript,我会使用一个允许自定义值(排序依据)的函数。@SamDufel,我认为你总结得非常完美。你可以为每个字段创建一组函数,然后使用switch命令选择正确的一个
switch(sort_by){case'id':func=function(a,b){…}break;case'other_field':func=function(a,b){…}break;…}array.sort(func);
array.sort(function(a,b){return a.id - b.id});