我使用此代码触发事件:
$input = array(1,2,3);
$result = $EventManager->trigger('onChangeArray',$this,array('values'=>$input));
$c = $result->count();
$final = array();
for($i=0; $i<$c; $i++)
$final = array_merge($final , $result->pop());
我想在attach函数中更改此数组。如果我添加到数组,$ final包含所有值正确;但我想从附加功能中删除$ final中的值。我需要调用attach函数进行嵌套,每次函数调用前一个函数返回的数组。 我使用此代码为BootStrap中的数组添加值:
$SharedManager->attach('Identifier', 'onChangeArray', function($e) {
$values = $e->getParam('values');
$values[] = 4 ;
return $values;
});
如果可能请帮我从阵列中删除。
答案 0 :(得分:1)
好的,我想我现在明白了。在您使用for
循环时,不是从结果集合中获取返回值,而是创建一个包含值的事件对象,并让您的侦听器代替该数组。
$input = array(1,2,3);
$event = new \Zend\EventManager\Event('onChangeArray', $this, array('values' => $input));
$EventManager->trigger($event);
$values = $event->getParam('values');
因为事件是通过引用传递的,所以您的侦听器不需要返回任何内容,只需要对values
参数进行操作即可。考虑以下两个侦听器,一个添加,一个从数组中删除。既不直接返回值,也会对values
中包含的$event
param采取行动
$SharedManager->attach('Identifier', 'onChangeArray', function($e) {
$values = $e->getParam('values');
// add value 4 to array
$values[] = 4 ;
$e->setParam('values', $values);
});
$SharedManager->attach('Identifier', 'onChangeArray', function($e) {
$values = $e->getParam('values');
// remove value of 3 from array
if (($key = array_search(3, $values)) !== false) {
unset($values[$key]);
}
$e->setParam('values', $values);
});
按照第一步中的指示触发事件后,您会发现事件中的values
参数包含最终数组......
// ..
$EventManager->trigger($event);
$values = $event->getParam('values');
\Zend\Debug\Debug::dump($values);
// result
array(3) {
[0] => int(1)
[1] => int(2)
[3] => int(4)
}