【问题标题】:Sorting PHP Array by ISO Date按 ISO 日期对 PHP 数组进行排序
【发布时间】:2012-07-04 03:32:25
【问题描述】:

我正在尝试按 ISO 8601 格式的日期和时间对 PHP 中的数组进行排序。我仍在尝试掌握 PHP,并尝试了许多有关堆栈溢出的解决方案,但我无法确定正确的功能。希望这是一个简单的答案,对其他人有帮助。

仅供参考,此数组由 Citrix API for GoToMeeting 生成。我想根据 startTime 在列表中最早的时间对数组进行排序。

这是使用 var_export 的数组的样子,并显示了两个结果:

array (
 0 => stdClass::__set_state(
  array(
   'createTime' => '2012-07-03T19:36:58.+0000',
   'status' => 'INACTIVE',
   'subject' => 'Client 1',
   'startTime' => '2012-07-10T14:00:00.+0000',
   'conferenceCallInfo' => 'United States: xxxxx Access Code: xxxxx',
   'passwordRequired' => 'false',
   'meetingType' => 'Scheduled',
   'maxParticipants' => 26,
   'endTime' => '2012-07-10T15:00:00.+0000',
   'uniqueMeetingId' => 12345678,
   'meetingid' => 123456789,
  )
 ),
 1 => stdClass::__set_state(
  array(
   'createTime' => '2012-07-02T21:57:48.+0000',
   'status' => 'INACTIVE',
   'subject' => 'Client 2',
   'startTime' => '2012-07-06T19:00:00.+0000',
   'conferenceCallInfo' => 'United States: xxxxx Access Code: xxxxx',
   'passwordRequired' => 'false',
   'meetingType' => 'Scheduled',
   'maxParticipants' => 26,
   'endTime' => '2012-07-06T20:00:00.+0000',
   'uniqueMeetingId' => 12345678,
   'meetingid' => 123456789,
  )
 ),
)

我的目标是然后使用 foreach 循环将数组输出到 html div 中,这段代码是完整的并且运行良好,但我的排序是关闭的 :-)

提前感谢您的帮助!

史蒂夫

【问题讨论】:

  • iso8601 的好处是你通常可以只做一个简单的字符串排序并以正确的顺序排列它们。查看usort()

标签: php arrays citrix iso8601


【解决方案1】:

如果将其包装在回调中并使用usort()docs here,则可以实现任何您能想到的排序技术

在您的回调中,您可以使用 strtotime 或类似方法,并进行简单的 int 比较。

$myDateSort = function($obj1, $obj2) {
  $date1 = strtotime($obj1->startTime);
  $date2 = strtotime($obj2->startTime);
  return $date1 - $date2; // if date1 is earlier, this will be negative
}
usort($myArray, $myDateSort);

【讨论】:

  • 感谢代码 sn-p,不幸的是这不会影响我的结果。试图理解代码,usort 是否为函数生成了 $obj1、$obj2 输入?
  • 有点...当您调用 usort 并将其传递给数组时,它会多次调用您的函数,每次传入数组中的 2 个对象。因此,$obj1 和 $obj2 都是您的数组保留的值的每个实例(我认为您的代码表明它们是 stdClass 实例)。在函数内部,您只需评估第一个是否“小于”第二个,如果是,则返回负整数,否则返回正整数(或相同为零)。 PHP 会根据为大多数数组值对调用函数来对数组进行实际排序。
  • 再看一遍后,我能够让我的数组以正确的顺序排序和输出。如果您使用答案中提供的代码并且结果未排序,请向其他人说明,请尝试使用 usort($this->$myArray, $myDateSort);
  • 感谢您的帮助 ctrahey!
猜你喜欢
  • 2012-08-24
  • 2011-02-10
  • 1970-01-01
  • 1970-01-01
  • 2013-11-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多