摘要:驗證一下,把打亂一下順序測試樹結構樹線性結構第一個欄目調換到這里指向掉,對沒有影響然后指向,被刪掉了,掉對沒有影響然后進入指向掉,所以直接退出了我都不知道我寫得些什么鬼,
//非正常 function getSonIDs(&$list, $fid = 0){ static $ids = array(); foreach($list as $id => $pid){ if($pid == $fid){ unset($list[$id]); $ids[] = $id; getSonIDs($list, $id); } } return $ids; }
上個星期為CMS修改一個功能:需要獲取所有后輩節點ID(不需要為樹形結構),按照我的預想:已經判斷為子節點的數據,就unset掉,但是 它的值已經被賦給$id, 了,所以并不會影響接下來的結果;
但是 代碼卻總在層數最低的節點 遞歸 回歸的時候,就直接退出了
getSonIDs(&$list, 0) getSonIDs(&$list, 1) getSonIDs(&$list, 2) getSonIDs(&$list, 3) <- 總是在這一步執行之后就直接退出了 getSonIDs(&$list, 4)
//正常 function getSonIDs($list, $fid = 0){ static $ids = array(); static $count = 0; foreach($list as $id => $pid){ if($pid == $fid){ //unset($list[$id]); $ids[] = $id; getSonIDs($list, $id); } } return $ids; }
//測試 /** 樹結構 */ $tree = [ 1 => [2,3], 4 => [5,6], 7 => [8,9], 10 => [11,12] ]; /** 樹線性結構 */ $treeArr = [ 1 => 0, 2 => 1, 3 => 1, 4 => 0, 5 => 4, 6 => 4, 7 => 0, 8 => 7, 9 => 7, 10 => 0, 11 => 10, 12 => 10 ];
(不要吐槽代碼)(寫得有點亂,不知道下次自己看還看不看得懂)
以自己微薄的C語言知識來猜測一下(應該就是這樣) : foreach 賦值當前變量的時候,實際上 foreach->next 已經指向數組的下一個元素了,所以,在遞歸調用中中我 unset() 后,那里就為 null 了,所以,等遞歸棧收斂完成,回歸,foreach 讀取下一個元素,發現為null, 就退出了,實際上數組還有后繼元素,只不過 foreach->next 所指向的東西已經被 unset了。
驗證一下,把 $treeArr 打亂一下順序
//測試 /** 樹結構 */ $tree = [ 1 => [2,3], 4 => [5,6], 7 => [8,9], 10 => [11,12] ]; /** 樹線性結構 */ $treeArr = [ 2 => 1, 3 => 1, 4 => 0, 1 => 0, <- 第一個欄目調換到這里 5 => 4, 6 => 4, 7 => 0, 8 => 7, 9 => 7, 10 => 0, 11 => 10, 12 => 10 ]; $return = [4,5,6,1,2,3,7,8,9]
key = 4 , next 指向 key=1 ,unset掉 5,6 , 對next 沒有影響
然后 key = 1 next 指向 key=7 (5,6被刪掉了) ,unset 掉 2,3 , 對next 沒有影響
然后 進入 key=7 next 指向 key=8 ,unset掉 8,9 ,所以直接退出了
我都不知道我寫得些什么鬼,
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/21660.html
摘要:規定要反轉的字符串。參考文檔實現字符串翻轉包含中文漢字參考處理漢字官方文檔函數最下面給出了支持的方案三用法區別以及之間關系用法如果是非空或非零的值,則返回。若想檢測常量是否已設置,可使用函數。 一、foreach 第一題: //1.for循環執行幾次 //for($i=0;$i=1;$i++){ // echo $i; //} $i==1條件很成立,死循環 for($i=0;$...
摘要:這種行為比最初出現的問題更為棘手,同時也是一種常見的錯誤源。這意味著這個數組的一份拷貝將會被返回,因此被調函數與調用者所訪問的數組并不是同樣的數組實例。 showImg(https://segmentfault.com/img/bV7reP?w=620&h=620); PHP 語言讓 WEB 端程序設計變得簡單,這也是它能流行起來的原因。但也是因為它的簡單,PHP 也慢慢發展成一個相對...
摘要:本文將會介紹自起,直至中增加的新特征。棄用的功能以下幾個功能被棄用,若在配置文件中啟用,則會在運行時發出警告。該類的完整限定名是其中第一個反斜杠表示全局命名空間。目的在于模仿的不對,目的是為了讓發布應用程序更加方便。 截至目前(2014.2), PHP 的最新穩定版本是 PHP5.5, 但有差不多一半的用戶仍在使用已經不在維護 [注] 的 PHP5.2, 其余的一半用戶在使用 PHP5...
摘要:我們為了處理這些挑戰,提出了一個新的引用測試框架當然,也是開源的,并且在整個過程中節省了上百萬美元。另一方面,被證實有一些嚴重的缺點部署困難而且慢。在緩存刷新期間,當可用于別的進程的已緩存的文件字節碼在此時損壞,就會導致崩潰。 How Badoo saved one million dollars switching to PHP7 我們成功的把我們的應用遷移到了php7上面(數百臺機...
摘要:如何證明我的說法呢可以用下面這段代碼檢驗。那么在這里我們需要特別注意,為了保險起見我們在遍歷數組后,最好手動一下數組,防止出錯這樣就正常了。還有一點手冊也提醒我們了轉成代碼的意思就是遍歷后和是真實存在的,最好使用后能手動掉。 以下所有結論均基于PHP5版本看下面一段最基礎的foreach遍歷數組代碼。 輸出為’0a1b2c’自然沒有疑問,那么此過程中$arr,$key,$valu...
閱讀 2085·2023-04-25 19:03
閱讀 1235·2021-10-14 09:42
閱讀 3414·2021-09-22 15:16
閱讀 1000·2021-09-10 10:51
閱讀 1578·2021-09-06 15:00
閱讀 2409·2019-08-30 15:55
閱讀 491·2019-08-29 16:22
閱讀 901·2019-08-26 13:49