我没有使用mysql数据,而是创建了我计划用作内容数据源的csv文件等。
我已经成功地解析了csv并将其存储到一个复杂的数组中,该数组具有以下标题行,即数组的键。
"Title","Year","Rated","Released","Runtime","Genre","Director","Writer","Actors","Plot","Language","Country","Awards","Poster","Metascore","imdbRating","imdbVotes","imdbID","Type","Response"
我目前的阶段是允许对数组进行动态ajax排序。
我有两个字段,我允许在开头排序,“年”和“标题”。
所以我传递了不同的网址参数,例如“yearasc”或“yeardesc”或“titleasc”或“titledesc”。
然后尝试排序。
所以我所做的就是阅读不同的帖子,就是这样做。
首先,我创建了只存储关键字段的新数组,我需要进行排序。
然后根据排序类型,执行不同的array_multisort。
array_multisort($year, SORT_ASC, $all_rows);
但我得到的结果是多个重复数据。
但是我想知道第一行是否是标题行,这是我在任何排序之后传递数据的函数所需要的,这会引起数组排序的问题。
对于简单的数组排序,现有的函数很有意义并且工作正常。
但对于复杂的问题,即使理解如何解决这个问题也很复杂。
感谢任何建议,想法或想法。
谢谢!
答案 0 :(得分:3)
我没有可能会帮助你的实际代码,但我确实有一个建议,你可以解决这个问题并让它发挥作用..
保持简单。首先,使用您要排序的1个标题(年份或标题)创建自己的CSV。
编写代码以对其进行排序。
然后,添加另一个(如果您之前使用过年份则为标题,如果之前使用过标题则为年份),并根据您的需要进行排序。
然后,再添加一个您 想要排序的标题(例如,评分)。
然后,您应该能够使用原始CSV。
我尝试编写简单的方法,并在每个方法中尽量减少处理。
我希望有所帮助。我意识到它的答案是更具哲学性的,所以如果能帮助你完成工作,它就会受到重创。只要意识到这种方法确实需要花费更多的时间来写 - 但其背后的一点是,你要把所有的"噪音"那是第一个妨碍你的方式。它可以帮助您首先查看您的问题并解决它。
答案 1 :(得分:1)
您可以为数组设置自定义排序功能。如果您需要保留原始数组键,请使用asort()
。
<?php
$sortfields = array('year', 'bleh');
function cmp($a, $b) {
global $sortfields;
foreach ($sortfields as $sortfield) {
$cmp = strcmp($a[$sortfield], $b[$sortfield]);
// if desc, invert sign of $cmp
if ($cmp !== 0)
return $cmp;
}
return 0;
}
usort($all_rows, "cmp");
函数usort()
调用用户定义的比较函数,该函数从strcmp
函数返回相同的逻辑:0如果相等,则&lt; 0是$ a小于$ b和&gt;如果$ a大于$ b,则为0。
此函数将比较$ sortfields变量中设置的每个字段,如果找到任何不同的比较(在订单集中),它将立即返回差异。