2011-06-21 65 views
0

我有一个包含ORDER(整数)UUID和MODIFIED(时间戳)的PHP数组(从MYSQL调用)。数组按ORDER升序排序,然后按MODIFIED排序。基于时间戳和订单的PHP重新排序阵列

例如:

$resource['Resource']['id']; 
$resource['Resource']['order']; 
$resource['Resource']['modified']; 

为了测试这些我使用下面的循环:

foreach ($resources as $resource): 
    echo '<tr><td>' . $resource['Resource']['id'] . '</td>'; 
    echo '<td>' . $resource['Resource']['order'] . '</td>'; 
    echo '<td>' . $resource['Resource']['modified'] . '</td></tr>'; 
endforeach; 

有时,当特定的操作被执行,该命令可成为重复。例如:

4dff97be-b0c4-45ac-a568-12f2cdbabb55,400,15时10分35秒2011-06-21

4e01006a-d46c-4f83-8c78-0eb1cdbabb55,400,2011-06-21 15:15:42

当发生这种情况时,我需要一个函数来遍历数据,直到它找到两个重复项(当然是相互相邻的(因为ORDER/MODIFIED排序的数组见上) 。当它找到两个我需要它看到哪一个是最近的时候,将它加1,然后遍历数组中剩余的记录递增,直到不再有重复。 10这是比我习惯的更高级的编程,真的,真的需要一些帮助。任何时候任何人都可以放弃它会被感激地接受。

+2

好像你需要usort(http://php.net/manual/en/function.usort .PHP)。您只需编写适当的比较函数 - 查看注释中的示例。 – Zyava

回答

0

这只需要一个循环。所以这将是O(n)操作。

这个问题很简单。所以不要流汗。这将适用于你可能有很多重复。

​​
+0

''$ temp = getArrayFirstElement($ resource)' - >'$ temp = reset($ resource)' - 不要自己编写和reset()一样的函数。 – hakre

+0

@hakre k,我重新阅读您的评论。你是对的。我将对代码进行适当的更新。 – FinalForm

+0

对,误解了,我的错。这更像是'list($ temp)= array_values($ resource);' – hakre

0

要做你想做的事情,最简单的事情就是把数组的所有元素放到不同的数组中。第二个数组将按顺序键入。否则,它将包含标识,(如果您想轻松地重新使用子数组,则需要订购),修改日期和计数。

由于要遍历原始数组,请检查第二个数组中是否存在使用isset()的订单。如果已设置,则比较日期并更新,如果当前更新并增加计数。如果它不存在,只是设置,使数= 1

例子:

$new_array (
    400 => (
     id => 'blah', 
     order => 400, 
     modified => 'new date', 
     count => 2, 
    ), 
    401 => (
     id => 'blah2', 
     order => 401, 
     modified => 'date', 
     count => 1, 
    ), 
)