1. 程式人生 > >PHP 無限遞迴函式

PHP 無限遞迴函式


/**
 * 無限遞迴下拉選擇框
 * @param $data   陣列
 * @param $pid    父id
 * @param int $t  迴圈次數:作用縮排
 * @param int $selected 選中的下標
 * @return string
 * @author zhengjingqiang
 * @email [email protected]
 * @date 2015-10-22
 */
function html_options($data=array(), $pid=0, $t=-1, $selected=0){
    $html_options = '';
    $t++;
    $nbspstr = str_repeat(' ', $t * 4);
    if ($data) {
        foreach ($data as $k => $v) {
            if($pid == $v['pid']){
                // 判斷是否是最後一個下拉選項卡
                $symbol_str = (count($data) == ($k+1)) ? '┗' : '┣';
                // 判斷是否選中
                $selected_str = ($selected == $v['id']) ? ' selected="selected"' : '';
                // 下拉選擇框資料
                $html_options .= '<option value="' . $v['id'] . '" '.$selected_str.'>' . $nbspstr . $symbol_str . $v['name'] . '</option>';
                // 無限迴圈查詢子集
                $html_options .= html_options($data, $v['id'], $t, $selected);
            }
        }
    }
    return $html_options;
}






/**
 * 二維陣列遞迴
 * @param array $arr
 * @return array
 * @author zhengjingqiang
 * @email 
[email protected]
 */ function category($arr = array()){     $info = array();     if(count($arr) > 0){         foreach($arr as $k => $vo){             if($vo['pid'] == 0 ){                 foreach($arr as $v){                     if($v['pid'] == $vo['id']){                         $vo['children'][] = $v;                     }                 }                 $info[] = $vo;             }         }     }     return $info; } /**  * 無限分類  * @param $array  * @param int $pid  * @return array  * @author zhengjingqiang  * @email
[email protected]
 */ function menuTree($array,$pid){     $arr = array();     foreach ($array as $v) {         if ($v['pid'] == $pid) {             $tem = menuTree($array, $v['id']);             //判斷是否存在子陣列             $tem && $v['child'] = $tem;             $arr[] = $v;         }     }     return $arr; }


相關推薦

PHP 無限函式

/**  * 無限遞迴下拉選擇框  * @param $data   陣列  * @param $pid    父id  * @param int $t  迴圈次數:作用縮排  * @param int $selected 選中的下標  * @return string

php 函式的三種實現方式 php利用函式實現無限級分類

遞迴函式是我們常用到的一類函式,最基本的特點是函式自身呼叫自身,但必須在呼叫自身前有條件判斷,否則無限無限呼叫下去。實現遞迴函式可以採取什麼方式呢?本文列出了三種基本方式。理解其原來需要一定的基礎知識水品,包括對全域性變數,引用,靜態變數的理解,也需對他們的作用範圍有所理解。遞迴函式也是解決無限級分類的一個很

PHP函式實現運算器

<html> <head> <meta charset="utf-8"/> </head> <body> <!-- 表單提交開始--> <form action="test-digui.php"

php 無限分類

$categories = array( array('id'=>1,'name'=>'電腦','pid'=>0), array('id'=>2,'name'=>'手機','pid'=>0), array('id'=>3,

PHP函式的一個常見邏輯問題

首先,我們得知道遞迴函式是什麼東西,通俗來講也就是自己呼叫自己本身的函式。 現在需要設計一段程式碼,解決1到10疊加的問題。 程式碼A: <?php //遞迴函式 $num=10; function add($sum){ static $tot; if

php 無限查詢子id 子類 根據父分類 父ID 查詢所有子分類 子ID

    function posterity($fid) {  global $connection; //static $children=array(); global $children; $sql = "SELECT DEPT_ID  FROM department WHERE DEPT_PAREN

php實現無限極分類獲取樹形結構

 表中的資料如下: 遞迴的方法:  /** * 用遞迴獲取子類資訊 * $data 所有分類 * $parent_id 父級id * $level 層級 * $result 分好類的陣列 */ function getChild($data,$parent

php函式及簡單例項講解

遞迴函式即自呼叫函式,在函式體內部直接或者間接的自己呼叫自己,即函式的巢狀呼叫是函式本身。通常在此型別的函式提之中會附加一個條件判斷敘述,以判斷是否需要執行遞迴呼叫,並且在特定的條件下終止函式的遞迴呼叫動作,把目前流程的主控權交回到上一層函式來執行。以此,當某

PHP中使用函式

下面是使用遞迴函式的一個小例子。 目的是根據parent_id和task_id對task進行分類。 具體實現: <?php //連線資料庫,使用前幾天建立的資料庫連線檔案進行連線,如

第四章 php函式(自定義函式、變數範圍、引數傳遞,可變函式函式、內建函式)

任何有效的php程式碼都可以作為函式體使用 //例子1 function add($a,$b){ echo $a+$b; } add(10,20); //php頁面顯示30 // 例子2 function add($a,$b){ return $a+$b; //r

php函式的理解

很多同學在學習遞迴函式的時候會感到頭暈,無法搞清楚遞迴函式的原理和執行機制,本文將給大家詳細講解遞迴函式的執行機制和運用。 那什麼是遞迴函式呢? 遞迴函式即為自呼叫函式,在函式體內直接或間接自己呼叫自己,但需要設定自呼叫的條件,若滿足條件,則呼叫函式本身,若

淺談PHP第四談---函式

很多同學在學習遞迴函式的時候會感到頭暈,無法搞清楚遞迴函式的原理和執行機制,本文將給大家詳細講解遞迴函式的執行機制和運用。 那什麼是遞迴函式呢? 遞迴函式即為自呼叫函式,在函式體內直接或間接自己呼叫自己,但需要設定自呼叫的條件,若滿足條件,則呼叫函式本身,若不滿足則終止本函式的自呼叫,然後把目前流程的

php實現的無限級別分類

<?php header("Content-type:text/html; charset=utf-8"); /**  *   * @category contry_category 實現一個無限級別分類,類似種類的劃分,常用在欄目導航  *   */ /**  +-------------------

php不用實現無限分類資料的樹形格式化

<?php /**  * 此方法由@Tonton 提供  * http://my.oschina.net/u/918697  * @date 2012-12-12   */ FUNCTION genTree5($items) {      foreach ($items AS $item)       

C++拷貝建構函式的引數為什麼必須使用引用型別(無限)

 我轉載這個主要是因為這個風趣幽默哈。。  在C++中, 建構函式,拷貝建構函式,解構函式和賦值函式(賦值運算子過載)是最基本不過的需要掌握的知識。 但是如果我問你“拷貝建構函式的引數為什麼必須使用引用型別?”這個問題, 你會怎麼回答? 或許你會回答為了減少一次記

PHP函式

遞迴函式:自己呼叫自己使用引用獲得遞迴結果:function showColors($colors,&$colorStr) { if(count($colors)==0)return false; $color = array_pop($colors)

拷貝建構函式的引數為什麼必須使用引用型別(避免無限拷貝,但其實編譯器已經強制要求了)

在C++中, 建構函式,拷貝建構函式,解構函式和賦值函式(賦值運算子過載)是最基本不過的需要掌握的知識。 但是如果我問你“拷貝建構函式的引數為什麼必須使用引用型別?”這個問題, 你會怎麼回答? 或許你會回答為了減少一次記憶體拷貝? 很慚愧的是,我的第一感覺也是這麼回答。不好還

十一、Go基礎程式設計:函式函式型別、匿名函式與閉包

1. 遞迴函式 遞迴指函式可以直接或間接的呼叫自身。 遞迴函式通常有相同的結構:一個跳出條件和一個遞迴體。所謂跳出條件就是根據傳入的引數判斷是否需要停止遞迴,而遞迴體則是函式自身所做的一些處理。 //通過迴圈實現1+2+3……+100 func Test01() int { i

函式使用例項

一.建立遞迴陣列 //$fid 父id $v['id'] 子id $v['child'] 子id陣列 //$cate 要迴圈的一維陣列 function digui($cate, $fid = 0){ foreach ($cate as $v)

Python全棧學習筆記day 17:函式之:二分法(老男孩Python全棧學習s9 day17 二分法程式有些問題)

遞迴函式 遞迴 : 在函式中呼叫自身函式 最大遞迴深度預設是997/998 —— 是python從記憶體角度出發做得限制 二分法: 實現程式: 最基礎版:(很多問題:切分導致出現了新列表,無法返回元素在 l 中的位置) l = [2,3,5,10,15,16,