基于时间戳和顺序的PHP重排数组

问题描述

| 我在PHP中(从MysqL调用)有一个数组,其中包含一个ORDER(整数),一个UUID和一个MODIFIED(时间戳)。该数组按ORDER升序排序,然后按MODIFIED排序。 例如:
$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;
有时,当执行某个操作时,ORDER可能会重复。例如: 4dff97be-b0c4-45ac-a568-12f2cdbabb55,400,2011-06-21 15:10:35 4e01006a-d46c-4f83-8c78-0eb1cdbabb55,400,2011-06-21 15:15:42 当发生这种情况时,我需要一个函数来遍历数据,直到找到两个重复项为止(当然,它们将彼此相邻(因为数组由ORDER / MODIFIED排序,请参见上文)。当找到两个重复项时,我需要它要查看哪个是最新的,将其递增1,然后循环遍历数组中剩余的记录,直到不再有重复项为止。 这比我以前习惯的编程更高级,确实需要一些帮助。任何人任何时候都可以给予的感谢。     

解决方法

        要执行您想要的操作,最简单的方法是将数组的所有元素放入另一个数组中。第二个数组将按顺序键入。否则,它将包含id(修改顺序和计数)(如果要轻松重用子数组,请排序)。 遍历原始数组时,请使用
isset()
检查第二个数组中是否有该顺序的条目。如果已设置,则比较日期,如果当前日期较新,则更新并增加计数。如果不存在,则将其设置为1。 例:
$new_array (
   400 => (
      id => \'blah\',order => 400,modified => \'new date\',count => 2,),401 => (
      id => \'blah2\',order => 401,modified => \'date\',count => 1,)
    ,        这仅需要一个循环。因此这将是O(n)运算。 这个问题很简单。所以不要流汗。无论您有多少重复项,它都可以使用。
<?
    $my_data = array();        
    $temp = reset($resource)
    $my_data[0] = $temp;

    $c = 0;
    next(resource);
    foreach ($resource as $one_resource)
    {
        $c++;

        if ($one_resource[\'order\'] == $temp[\'order\'])
        {
                $my_data[($c-1)] = $one_resource;
                $c--;
        }
        else
        {
                $my_data[$c] = $one_resource;
        }

        $temp = $one_resource;
    }

    // When the loop finishes,you\'ll have the data you want in the array $my_data
?>