PHP5.3.0使用标识符

PHP5.3.0使用标识符,php,php-5.3,Php,Php 5.3,昨天我问了一个关于使用标识符的问题,得到了回答 然而,我不得不两次扩展我的脚本来实现这一点,并且不确定如何适应这两种情况 $available_event_objects = array_filter($event_objects, function ($event_object) use ($week_events) { // keep if the event is not in $week_events return !in_array($event_object, $

昨天我问了一个关于使用标识符的问题,得到了回答

然而,我不得不两次扩展我的脚本来实现这一点,并且不确定如何适应这两种情况

$available_event_objects  = array_filter($event_objects, function ($event_object) use ($week_events) { 
    // keep if the event is not in $week_events
    return !in_array($event_object, $week_events);
  });`

$calendar\u weeks[$week\u count][$calendar\u date]=数组过滤器($available\u event\u objects,函数($event\u object)使用($date\u pointer){
//如果事件发生在这一天,请保留
返回($date\u pointer>=$event\u object->start\u date&$date\u pointer end\u date);
});`
如何更改此项以使其在5.2.9中正常工作

有人能给我指出正确的方向吗

干杯

更新答案:

虽然原始问题中的答案是正确的,并且允许您在PHP5.2中轻松使用array_filter,而无需闭包;简单地执行for循环会更容易:

$output = array_filter($input, function($input) use ($stuff) { return /* condition */ } );
更改:

$output = array();
foreach($input as $key=>$value) {

   if (/* condition */) {

      $output[$key] = $value;

   }

}

手册中的“闭包”部分对其进行了粗略的介绍

use($var)
所做的是在匿名函数和父作用域之间共享一个变量。通常它只保留初始值,并将该参数实际转换为某种静态变量

要将其转换为与PHP5.2兼容的构造,最好将闭包转换为静态回调函数。编写一个普通声明,而不是
=function(){}

function cb_event_filter_week($event_object) {
一种非常不美观的方法是通过全局作用域共享闭包/
使用
变量。为此,请将函数重写为

function cb_event_filter_week($event_object) {
     global $week_events;
您必须在父函数中执行相同的操作,也要初始化它!给这个变量一个更独特的名字是非常明智的。如果您只需要在应用程序流中的某个点(!)调用此回调函数,那么这里更好的替代方法是使用静态变量:

function cb_event_filter_week($event_object) {
     static $week_events = 0;

这取决于它是如何被利用的。但在任何一种情况下,您都可以编写
=array\u filter($event\u objects,“cb\u event\u filter\u week”)
在PHP5.2中使用它们。PHP在5.3之前没有匿名函数。您必须改为使用任何一个。因为这会变得更加困难,并且对于像您这样的用例来说不是很习惯,所以我建议您使用命令式编程风格

$available_event_objects = array();
foreach ($event_objects as $event_object) {
    if (in_array($event_object, $week_events)) {
        $available_event_objects[] = $event_object;
    }
}

也就是说,在这种情况下,您可以自由使用
array\u intersect
,即
$available\u event\u objects=array\u intersect($week\u events,$event\u objects)

您好,谢谢您的回复。问题是,我需要在5.2.9中使用此功能,而使用标识符仅在5.3.0中可用阅读您链接的问题似乎您希望使这些3.0脚本与2.9兼容。从当前的问题来看,这并不清楚,因此您可能需要澄清。
$available_event_objects = array();
foreach ($event_objects as $event_object) {
    if (in_array($event_object, $week_events)) {
        $available_event_objects[] = $event_object;
    }
}