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;
}
}