按对象中的日期对对象数组进行排序

彼得鲁贾克

我正在尝试将此数组与对象进行排序,该数组源自Google Calendar Batch请求中的结果与对象的数组:

array(3) {
  ["response-test0"]=>;
  object(Google_Service_Calendar_Events)#46 (17) {
        .
        .
        .
      ["items"]=>;
      array(1) {
        [0]=>;
        array(20) {
            .
            .
          ["start"]=>;
          array(1) {
            ["dateTime"]=>;
            string(25) "2017-02-01T10:00:00+01:00"
          } 
        .
        .
        .
  ["response-test1"]=>;
  object(Google_Service_Calendar_Events)#46 (17) {
        .
        .
        .
      ["items"]=>;
      array(1) {
        [0]=>;
        array(20) {
            .
            .
          ["start"]=>;
          array(1) {
            ["dateTime"]=>;
            string(25) "2017-02-01T11:00:00+01:00"
          }
        .
        .
        .
  ["response-test3"]=>;
  object(Google_Service_Calendar_Events)#46 (17) {
        .
        .
        .
      ["items"]=>;
      array(1) {
        [0]=>;
        array(20) {
            .
            .
          ["start"]=>;
          array(1) {
            ["dateTime"]=>;
            string(25) "2017-02-01T11:00:00+01:00"
          }
        .
        .

这是获取数据的代码:

$arrlength = count($calendarId);
for ($x = 0; $x <= $arrlength-1; $x++) {
    $results = $service->events->listEvents($calendarId[$x], $optParams);
    $batch->add($results, "test" .$x);
};
$results = $batch->execute();

结果数组包含(在本例中)名为[“ response-test0”],[“ response-test1”]和[“ response-test2”]的对象,如我的数组示例所示。

编辑:据我所知,答案中似乎缺少数组对象与关联数组相混淆的事实(或者我错了)?在对象内部进行搜索的建议似乎是在正确的方向上,但由于无法考虑“顶层” ['response_x'],因此我无法对其进行全面测试。

用于对开始日期进行排序的结构(而不​​是对每个对象中的日期分别进行排序):

array(3) {
    ["response-test0"]
    Object(Google_Service_Calendar_Events)#46(17){
    .
    .
    }
    ["response-test1"]
    Object(Google_Service_Calendar_Events)#46(17){
    .
    .
    }
    ["response-test2"]
    Object(Google_Service_Calendar_Events)#46(17){
    .
    .
    }

我尝试使用此代码段(以及许多其他代码)按日期([“ start”])对单个项目进行排序-日历会议的开始,但到目前为止还算不上成功。我也考虑过合并对象,但是没有运气。我是PHP的新手,但是相当了解编程的基础知识,所以我希望有人可以指出正确的方向-我将不胜感激:

usort($results, function($a, $b) {
    return $a['items']['start'] - $b['items']['start'];
});

var_dump( $results );
彼得鲁贾克

我本人通过构建一个更易于管理的数组来排序(通过遍历Calendar API中的结果数组)来找到了一个可行的解决方案(接近Nitin的建议)。对于其他可能遇到相同问题的人,我在此处发布了相关部分。我确信我的代码可以优化,并且在外观上看起来更好,但是它可以正常工作:

function cmpDate($a, $b) {
    $date1 = new DateTime($a['start']);
    $date2 = new DateTime($b['start']);

    $date1 = $date1->getTimestamp();
    $date2 = $date2->getTimestamp();
    return $date1 - $date2;
}

$y = 0;
for ($x = 0; $x <= $arrlength-1; $x++) {
if (count($results["response-test".$x.""]->getItems()) == 0) {

} else {

  foreach ($results["response-test".$x.""]->getItems() as $event) {
    $start = $event->start->dateTime;
    $dato = date_format(date_create($start), "d.m.Y");
    $s = strtotime($start);
    if (empty($start)) {
      $start = $event->start->date;
    }
    $tid = new dateTime($start);
    $data[$y]['start'] = $start;
    $data[$y]['dato'] = $dato;
    $data[$y]['tid'] = $tid->format('H:i');
    $data[$y]['lokasjon'] = $event->getLocation();
    $data[$y]['organisator'] = $event->getOrganizer()->email;
    $data[$y]['tema'] = $event->getSummary();
    $y++;
  }
}
usort($data, 'cmpDate');

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章