php 數組擷取父節點

來源:互聯網
上載者:User
比如一個數組裡包括地名,你已經知道了石家莊,怎麼知道它的上級河北。或者你已經知道了北京,怎麼知道它的上級中國

回複內容:

比如一個數組裡包括地名,你已經知道了石家莊,怎麼知道它的上級河北。或者你已經知道了北京,怎麼知道它的上級中國

用id做數組的鍵 每項裡麵包括parent_id

最近剛好寫了一份擷取n維數組某個節點的深度和父級節點的代碼,希望對題主有用

class ArrayUtil {    /**     * 深度優先遍曆尋找一個樹形結構中,某個節點的所在位置     *     * 參數例子:     * $input: [     *   'a' => [     *     'b' => [     *       'c' => []     *     ]     *   ],     *   'd' => [     *   ]     * ]     * $target: c     * 傳回值: [3, ['a','b','c']]     *     * 可以用list($level, $pathKeys) = self::getNodeLevel(....)來進行使用     * $level展示層級     * $pathKeys表示訪問到這個節點需要經過的key     *     * @param array $input 輸入     * @param string $target 希望尋找的節點(key或者value),例如 'f'     * @param array $pathKeys 節點數組列表     * @return null|array [$level, [$pathKey0, $pathKey1, ...]] 沒有找到時會返回空     */    public static function getNodeLevel(array $input, $target, array $pathKeys = [])    {        foreach ($input as $key => $val) {            $pathKeys[] = $key;            if ($key == $target) {                return [count($pathKeys), $pathKeys];            } elseif (is_array($val)) {                //當前範圍沒有找到值,遞迴進入下一層                $result = self::getNodeLevel($val, $target, $pathKeys);                if ($result) {                    return $result;                }            }            array_pop($pathKeys);        }        return null;    }}

使用:

$input = [    'a' => [        'b' => [            'c' => ['hello', 'world']        ]    ],    'd' => [    ]];list($depth, $parents) = ArrayUtil::getNodeLevel($input, 'c');print_r($depth); //層級,輸出3echo "\n";print_r($parents);/*父級節點,輸出Array(    [0] => a    [1] => b    [2] => c)*///獲得目標節點的子數組$target = &$input;foreach ($parents as $key) {    $target = &$target[$key];}print_r($target);/*輸出子節點Array(    [0] => hello    [1] => world)*/

代碼在哪裡?

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.