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