php 数组操作函数 current 赋值后会重置该数组的指针

今天在写路由类中执行路由闭包方法的时候,突然遇到了一个问题。

需求是这样的:

触发某条路由之后执行对应的闭包函数。闭包函数中可能存在参数但个数不确定。
现在把路由规则值数组中(self::$urlVars)对应的值赋给闭包中的参数

self::$urlVars大致格式如下:

1
2
3
4
5
6
7
8
9

[
':num' => [
'0' => '123';
'1' => '456';
],
':alphabet'=> 'aaa',
];

由于数组索引是不规则的又不想用foreach,然后发现php还有个current、next、prev函数用于对数组指针对应单元的读取。然后就准备用这个写(代码如下)。

1
2
3
4
5
6
7
8
9
10
11
12
13

current(self::$urlVars);
$param = [];
for($i = 0;$i < $params;$i++){
$item = next(self::$urlVars);
if(is_array($item)){
$param[] = $item[0];
}else{
$param[] = $item;
}
}
call_user_func_array($callback,$param);

然后就内存耗尽了= =,查阅php文档发现


评论区