我使用array_walk遍历一个数组“sessions”,每次都将我的数据($ uid)发送给该函数。
$uid = ...;
array_walk($sessions, array($this,'handle_each_session'), array('uid' => $uid));
在函数'handle_each_session'中,还有另一个变量$package
。如果$package
为空,我将取消设置元素(从数组中删除元素),否则我会将$packag
e放入元素中。
private function handle_each_session (& $s, $k, $data)
{
$uid = $data['uid'];
$s['uid'] = $uid;
$package = $this->get_random_package($uid);
//- if $package is not defined, then unset the element
if (!isset($package) || empty($package))
{
unset($s);
return;
}
//- otherwise put the package into the element
$s['package'] = $package;
}
结果是元素$s
仍然存在,不会从会话数组中删除。
我如何存档?
答案 0 :(得分:1)
你不能这样做。 Unset($ s)不会破坏通过引用传递的$ session var。它破坏了$ s和$ session之间的联系。请参阅此处的文档 http://php.net/manual/en/language.references.unset.php
你最好通过引用一个新的" handle_session"来传递整个$ session。函数并通过其中的$ session数组。 使用unset($ session [$ key])应该有效。
答案 1 :(得分:0)
感谢@ Bar-code让我知道,我无法以这种方式解开元素。
我使用array_filter删除所有带有空包的元素,如下所示:
private function is_not_null_package($session) { $package = $session['package']; $empty = (!isset($package) || empty($package)); return (!$empty); } //- handle sessions array_walk($sessions, array($this,'handle_each_session'), array('uId' => $uid)); //- filter sessions //- remove all sessions with empty packages $sessions = array_filter($sessions, array($this, 'is_not_null_package') );
它对我有用。