PHP排序复杂数组

时间:2014-07-21 06:04:19

标签: php jquery ajax arrays

我没有使用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);

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

但是我想知道第一行是否是标题行,这是我在任何排序之后传递数据的函数所需要的,这会引起数组排序的问题。

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

但对于复杂的问题,即使理解如何解决这个问题也很复杂。

感谢任何建议,想法或想法。

谢谢!

2 个答案:

答案 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变量中设置的每个字段,如果找到任何不同的比较(在订单集中),它将立即返回差异。