国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

PHP foreach 一點細節(jié)

Soarkey / 3017人閱讀

摘要:驗證一下,把打亂一下順序測試樹結(jié)構(gòu)樹線性結(jié)構(gòu)第一個欄目調(diào)換到這里指向掉,對沒有影響然后指向,被刪掉了,掉對沒有影響然后進入指向掉,所以直接退出了我都不知道我寫得些什么鬼,

//非正常
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修改一個功能:需要獲取所有后輩節(jié)點ID(不需要為樹形結(jié)構(gòu)),按照我的預(yù)想:已經(jīng)判斷為子節(jié)點的數(shù)據(jù),就unset掉,但是 它的值已經(jīng)被賦給$id, 了,所以并不會影響接下來的結(jié)果;

但是 代碼卻總在層數(shù)最低的節(jié)點 遞歸 回歸的時候,就直接退出了

getSonIDs(&$list, 0)
    getSonIDs(&$list, 1)
        getSonIDs(&$list, 2)
        getSonIDs(&$list, 3)    <- 總是在這一步執(zhí)行之后就直接退出了
    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;
}
//測試
/** 樹結(jié)構(gòu) */
$tree = [
    1 => [2,3],
    4 => [5,6],
    7 => [8,9],
    10 => [11,12]
];
/** 樹線性結(jié)構(gòu) */
$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語言知識來猜測一下(應(yīng)該就是這樣) : foreach 賦值當前變量的時候,實際上 foreach->next 已經(jīng)指向數(shù)組的下一個元素了,所以,在遞歸調(diào)用中中我 unset() 后,那里就為 null 了,所以,等遞歸棧收斂完成,回歸,foreach 讀取下一個元素,發(fā)現(xiàn)為null, 就退出了,實際上數(shù)組還有后繼元素,只不過 foreach->next 所指向的東西已經(jīng)被 unset了。

驗證一下,把 $treeArr 打亂一下順序

//測試
/** 樹結(jié)構(gòu) */
$tree = [
    1 => [2,3],
    4 => [5,6],
    7 => [8,9],
    10 => [11,12]
];
/** 樹線性結(jié)構(gòu) */
$treeArr = [
    2 => 1,
    3 => 1,
    4 => 0,
    1 => 0,   <- 第一個欄目調(diào)換到這里
    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 ,所以直接退出了

我都不知道我寫得些什么鬼,

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/21660.html

相關(guān)文章

  • PHP細節(jié)foreach、(漢子)字符串反轉(zhuǎn)、isset,empty用法區(qū)別以及0、‘’、null

    摘要:規(guī)定要反轉(zhuǎn)的字符串。參考文檔實現(xiàn)字符串翻轉(zhuǎn)包含中文漢字參考處理漢字官方文檔函數(shù)最下面給出了支持的方案三用法區(qū)別以及之間關(guān)系用法如果是非空或非零的值,則返回。若想檢測常量是否已設(shè)置,可使用函數(shù)。 一、foreach 第一題: //1.for循環(huán)執(zhí)行幾次 //for($i=0;$i=1;$i++){ // echo $i; //} $i==1條件很成立,死循環(huán) for($i=0;$...

    孫淑建 評論0 收藏0
  • 十個 PHP 開發(fā)者最容易犯的錯誤

    摘要:這種行為比最初出現(xiàn)的問題更為棘手,同時也是一種常見的錯誤源。這意味著這個數(shù)組的一份拷貝將會被返回,因此被調(diào)函數(shù)與調(diào)用者所訪問的數(shù)組并不是同樣的數(shù)組實例。 showImg(https://segmentfault.com/img/bV7reP?w=620&h=620); PHP 語言讓 WEB 端程序設(shè)計變得簡單,這也是它能流行起來的原因。但也是因為它的簡單,PHP 也慢慢發(fā)展成一個相對...

    fireflow 評論0 收藏0
  • PHP 自 5.2 到 5.6 中新增的功能詳解

    摘要:本文將會介紹自起,直至中增加的新特征。棄用的功能以下幾個功能被棄用,若在配置文件中啟用,則會在運行時發(fā)出警告。該類的完整限定名是其中第一個反斜杠表示全局命名空間。目的在于模仿的不對,目的是為了讓發(fā)布應(yīng)用程序更加方便。 截至目前(2014.2), PHP 的最新穩(wěn)定版本是 PHP5.5, 但有差不多一半的用戶仍在使用已經(jīng)不在維護 [注] 的 PHP5.2, 其余的一半用戶在使用 PHP5...

    番茄西紅柿 評論0 收藏0
  • Badoo 告訴你切換到 PHP7 節(jié)省了 100 萬美元

    摘要:我們?yōu)榱颂幚磉@些挑戰(zhàn),提出了一個新的引用測試框架當然,也是開源的,并且在整個過程中節(jié)省了上百萬美元。另一方面,被證實有一些嚴重的缺點部署困難而且慢。在緩存刷新期間,當可用于別的進程的已緩存的文件字節(jié)碼在此時損壞,就會導(dǎo)致崩潰。 How Badoo saved one million dollars switching to PHP7 我們成功的把我們的應(yīng)用遷移到了php7上面(數(shù)百臺機...

    biaoxiaoduan 評論0 收藏0
  • 當我們使用foreach時,內(nèi)部究竟發(fā)生了什么(PHP5)?

    摘要:如何證明我的說法呢可以用下面這段代碼檢驗。那么在這里我們需要特別注意,為了保險起見我們在遍歷數(shù)組后,最好手動一下數(shù)組,防止出錯這樣就正常了。還有一點手冊也提醒我們了轉(zhuǎn)成代碼的意思就是遍歷后和是真實存在的,最好使用后能手動掉。 以下所有結(jié)論均基于PHP5版本看下面一段最基礎(chǔ)的foreach遍歷數(shù)組代碼。 輸出為’0a1b2c’自然沒有疑問,那么此過程中$arr,$key,$valu...

    paulli3 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<