[英]unset an element in array_walk PHP
我每次使用array_walk遍歷數組“會話”時,都會將數據($ 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/zh/language.references.unset.php
您最好通過引用新的“ handle_session”函數傳遞整個$ session並通過其中的$ session數組。 使用unset($ session [$ key])應該可以。
感謝@ 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') );
這個對我有用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.