在我丢失登录id之前,我问了一个相关的问题-- PHP Version 5.2.14 / Parse error: syntax error, unexpected T_FUNCTION, expecting ')' --但这就是“整个”问题。
我很难弄清楚如何将这个函数(从某个地方获得)转换为PHP 5.2.14 (正如人们告诉我的那样,它不支持匿名函数)。我尝试了几种改变代码以使其与array_map()一起工作的方法,但是我不能理解所有东西是如何工作的!
下面粘贴了整个函数,但只有指出的区域才是PHP 5.2.14抱怨的区域。
function convertGeneralAvailabilityTime($date,$from_timezone,$from_timebegin, $from_timeend, $to_timezone)
{
$tz1 = new DateTimezone($from_timezone);
$datetime1 = new DateTime("$date $from_timebegin", $tz1);
$datetime2 = new DateTime("$date $from_timeend", $tz1);
$convertedAvail = array(
array($datetime1, $datetime2),
);
$tz2 = new DateTimezone($to_timezone);
//convert periods:
// ISSUE_START
$times = array_map(
function (array $p) use ($tz2) {
$res = array();
foreach ($p as $d) {
$res[] = $d->setTimezone($tz2);
}
return $res;
},
$convertedAvail
);
// ISSUE_END
$res = array();
foreach ($times as $t) {
$t1 = reset($t);
$t2 = next($t);
if ($t1->format("d") == $t2->format("d")) {
$res[$t1->format("l")][] = $t1->format("g:i a") . " to ".
$t2->format("g:i a");
}
else {
$res[$t1->format("l")][] = $t1->format("g:i a") . " to 11:59 pm";
$res[$t2->format("l")][] = "12:00 am to ". $t2->format("g:i a");
}
}
return $res;
}发布于 2010-09-23 21:14:24
如果您同意修改$converedAvail,那么可以使用array_walk并传递用户定义的数据:
function convertTimezone(array &$p, $key, $tz2) {
foreach ($p as &$d) {
$d = $d->setTimezone($tz2);
}
}
array_walk($convertedAvail, 'convertTimezone', $tz2);我还没有测试过。但是如果你之前的代码可以在5.3上运行,那么这个代码应该可以在5.2上运行。
发布于 2010-09-23 21:12:11
与在array_map()调用中使用内联函数不同,您可以在外部定期定义一个名称,并将其名称提供给array_map()。您可以在该函数内部使用global $tz2来访问该值。
function set_timezone_callback($p) {
global $tz2;
$res = array();
foreach ($p as $d) {
$res[] = $d->setTimezone($tz2);
}
return $res;
}
$times = array_map('set_timezone_callback', $convertedAvail);基于你的代码重构建议,假设它工作,没有测试。
发布于 2010-09-23 21:17:04
array_map只是对$convertedAvail的每个元素执行匿名函数。您可以使用foreach遍历元素并调用setTimezone(),而不是array_map。
foreach ($convertedAvail as $cKey => $dateArray)
{
foreach ($dateArray as $dKey => $date)
{
$convertedAvail[$cKey][$dKey]->setTimezone($tz2);
}
}https://stackoverflow.com/questions/3778659
复制相似问题