我使用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
仍然存在,没有从会话数组中删除。
我该如何存档?
你不能这样做。Unset($s)不会破坏通过引用传递的$session var。它会破坏%s和$session之间的链接。请参阅此处的文档:http://php.net/manual/en/language.references.unset.php
您最好通过引用一个新的"handle_session"函数来传递整个$session,并遍历其中的$session数组。使用unset($session[$key])应该可以工作。
感谢@Bar-code告诉我,我不能以这种方式取消设置元素。
我使用array_filter删除空包中的所有元素,如下所示:
私有函数is_not_null_package($session){$package=$session["package"];$empty=(!isset($package)|| empty($packaging));return(!$empty);}//-处理会话array_walk($sessions,数组($this,'handle_each_session'),数组('uId'=>$uId));//-筛选会话//-删除所有包含空包的会话$sessions=array_filter($sessions,array($this,'is_not_null_package'));
它对我有效。