Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为什么变量检查似乎可以纠正我的排序? 简而言之_Php_Sorting - Fatal编程技术网

Php 为什么变量检查似乎可以纠正我的排序? 简而言之

Php 为什么变量检查似乎可以纠正我的排序? 简而言之,php,sorting,Php,Sorting,当我在排序之前对数组调用print\r()或var\u dump()时,为什么返回错误数组排序的函数会返回预期的排序 本质 我正在尝试打印从几个Google日历收集的关于接下来几个事件的基本信息,这些信息根据事件开始日期/时间按自定义uasort()排序 function getUpcomingEvents() { $calUrls = array( /* Four Google calendar URLs */); foreach ($calUrls as $url)

当我在排序之前对数组调用
print\r()
var\u dump()
时,为什么返回错误数组排序的函数会返回预期的排序

本质 我正在尝试打印从几个Google日历收集的关于接下来几个事件的基本信息,这些信息根据事件开始日期/时间按自定义
uasort()
排序

function getUpcomingEvents() 
{
    $calUrls = array( /* Four Google calendar URLs */);

    foreach ($calUrls as $url)
    {
        $calEvents = json_decode(file_get_contents($url), true);

        for($i=0; $i<count($calEvents['items']); $i++)
        {
            $item = $calEvents['items'][$i];

            $events[] = array(
                'title' => $item['summary'],
                'description' => $item['description'],
                'start' => date_create($item['start']['dateTime']),
                'end' =>  date_create($item['end']['dateTime']),
                'htmlLink' => $item['htmlLink']
            );
        }
    }   

    //print_r($events);  // <-- **LOOK AT ME**

    uasort($events, function($a, $b) {
        return strtotime($a['start']->date) - strtotime($b['start']->date);
    });

    return $events;
} 

...*snip*...

<?php foreach(getUpcomingEvents() as $event) : ?>
    <li><h3><?php echo date_format($event['start'], 'M j'); ?></li>
<?php endforeach; ?>
函数getUpcomingEvents() { $calUrls=数组(/*四个谷歌日历URL*/); foreach($calurl作为$url) { $calEvents=json\u decode(文件获取内容($url),true); 对于($i=0;$i$item['summary'], 'description'=>$item['description'], 'start'=>date\u create($item['start']['dateTime']), 'end'=>date\u create($item['end']['dateTime']), 'HTMLINK'=>$item['HTMLINK'] ); } } //打印($events);//日期)-标准时间($b['start']->日期); }); 返回$events; } …*剪断*。。。
  • 当我加载以这种方式注释的print_r()页面时,我的列表项按以下顺序打印:

    2月19日、2月21日、2月23日、2月26日、3月5日、2月19日、2月16日……

    (注意:它们分别表示日历1、2、1、1、1、2、2、…)中的事件,因此它不只是反映日历请求的顺序。)

    在取消注释
    print\u r()
    (无其他更改)后,列表项按时间顺序打印:

    2月10日、2月14日、2月16日、2月16日、2月16日、2月19日、2月19日,…

    (注意:这些是打印的
  • ,而不是
    print\r()
    本身的输出,未排序)

    我试过:
    *声明
    全局$events
    getUpcomingEvents()
    *使用
    usort
    代替
    uasort
    ,使用单独的比较函数声明代替匿名声明
    *将
    $events
    构建为显式索引数组(
    $events[$i]=…
    ),而不是使用
    []
    运算符,以帮助保持更稳定的数组顺序
    *将
    getUpcomingEvents()
    赋值给一个新变量,然后将其传递到
    foreach


    变量检查是否真的影响了我的排序,还是我在其他地方出错了?

    否,打印不会影响数组。它只是显示变量的信息


    谢谢,我已经参考了PHP文档,但是文档并不一定排除修改的可能性,是不是?我应该强调的是,我认为我的变量不可能被修改,但它看起来确实是基于我描述的行为。我更新了问题标题,以便更好地关注问题。
    print_r — Prints human-readable information about a variable