2014-07-21 47 views
1

而不是使用MySQL数据的工作,我已经创建了我的计划,作为内容数据的源使用CSV文件等PHP排序一系列复杂

我已成功能够解析CSV和商店它变成一个复杂的数组,它具有以下标题行,即数组的键。

"Title","Year","Rated","Released","Runtime","Genre","Director","Writer","Actors","Plot","Language","Country","Awards","Poster","Metascore","imdbRating","imdbVotes","imdbID","Type","Response" 

我现在的阶段是允许数组的动态ajax排序。

我有两个字段,我允许在开始时排序,“年”和“标题”。

所以我传递不同的URL参数,如“yearasc”或“yeardesc”或“titleasc”或“titledesc”。

然后尝试对此进行排序。

所以我做了一个不同的帖子,就是这么做的。

首先,我创建了只存储关键字段的新数组,我需要进行排序。

然后根据什么类型,做一个不同的array_multisort。

array_multisort($year, SORT_ASC, $all_rows); 

但我得到的结果是多重复数据。

但是我不知道是否有第一行,是我经过任何排序后传递数据的函数所需的标题行,导致数组排序问题。

对于简单的数组排序,现有函数是有意义的,并且工作正常。

但是对于复杂的问题,甚至理解如何解决这个问题也很复杂。

任何意见,想法或想法,表示赞赏和感谢。

谢谢!

+1

**问题:**你有什么特别的理由说明你为什么选择一个'csv'文件而不是数据库选项? – Darren

回答

3

我没有那么很可能将帮助你实际的代码,但我有一个建议,至于如何才能解决这个并使其工作..

保持简单。首先,创建您自己的CSV,仅包含您想要排序的一个标题(年份或标题)。

写你的代码来排序。

然后,添加另一个(如果您以前使用Year,或者如果您以前使用过Title,则为Year),然后根据需要进行排序。

然后,再添加一个标头(比如说评级),表示您不需要要排序。

然后,您应该能够使用原始CSV。

我会尝试编写简单的方法,并保持每个处理的最小。

我希望有帮助。我意识到它的答案更具哲理性,所以如果它能帮助你完成工作,那么它就会受到打击或错过。只要意识到这种方法确实会花更多的时间来写作 - 但其背后的意义在于,你将首先消除所有“噪音”。它可以帮助你首先看到你的问题并解决问题。

+1

我对此投了票,因为你在这里有一些公平的有效答案,直到OP提供他的尝试,几乎不可能回答这个问题。 – Darren

+1

@Darren谢谢,我同意 –

+0

我不想重新创建csv,我只想把csv,我已经创建,并存储在一个数组中,现在让我能够按它排序。 清楚了吗? – crosenblum

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,如果相等,< 0是$ a小于$ B和> 0如果$ a大于$更大湾

该函数将比较$ sortfields变量中设置的每个字段,如果它发现任何不同的比较(按顺序设置),它将立即返回差异。

+0

这到底是什么?你能解释它的逻辑吗? – crosenblum

+0

我更新了strcmp代码并更新了逻辑。 – denisvm