一些语法,算法。

 

 

 /** 
     * 树递归,传引用到底
     * @param $id 要递归的id节点
     * @param array $arr 返回的多维数组
     */
    public static function getMenuTree($id, &$arr = array())
    {
        $sql = 'select bm_ModuleID as id,bm_ModuleName as text,bm_ModuleUrl as url from BM_ModuleStructure where bm_FModuleID = %d';
        $ret = self::getBySql($sql, array($id));
        if ($ret) {
            $arr['children'] = $ret;
            foreach ($arr['children'] as $key=>$v) {
                self::getMenuTree($v['id'],$arr['children'][$key]);
            }
        }
    }

 

 

/**
*递归返回值需要注意的问题
*/
function
findFile($directory, $fileName) { $mydir = dir($directory); while ($file = $mydir->read()) { if ((is_dir("$directory/$file")) AND ($file != ".") AND ($file != "..")) { return findFile("$directory/$file", $fileName); //重点 } else if ($file == $fileName) { $mydir->close(); return "$directory/$file"; //如果是出现的递归,此处返回的是递归里面的函数的值,外面还要返回一层。 } } $mydir->close(); return null; }

 


/*
* *引用的问题,第一次foreach,将$a 指向 arr[2],$a = &$arr[2]; *第二次foreach $a一次赋值,arr[2]也响应改变,121,然后$a被unset,第二第三次的$a都是new的,而且不是引用变量。arr[2]也就没有再被改变。 */ $arr = array('a'=>1, 'b'=>2, 'c'=>3); foreach ($arr as &$a); // do nothing. maybe? foreach ($arr as $a) // do nothing. maybe?
{
  unset($a);
}
print_r($arr); //122

/**
*上面的是变量引用
*下面再来看一个函数引用
*/
function &test() //需要调用例如:$a = &test();这引用函数时,该被引用的函数固定格式为:1,必须有返回值,2,函数前面需要加&号。
{
  static $b = 0;
  echo $b;
  return $b;
}
//调用
$a = test(); 没有起到引用的作用。函数定义那里的&是规定格式而已。
$a = &test();
$a = 5;
test();
输出: 0,5;

 

沉底法
for ($i = 0; $i < count($arr); $i++) {
        for ($j = 0; $j < count($arr) - $i -1; $j++) {
            if($arr[$j] < $arr[$j+1]){
                $tmp = $arr[$j];
                $arr[$j] = $arr[$j+1];
                $arr[$j+1] = $tmp;
            }
        }
    }
先抛开外循环,内循环就是循环一遍,将最小的元素沉到底。
循环count($arr)次后,达到目的。
count($arr)-$i-1意思就是沉下去的元素都是确定排序的了

反过来冒泡法
for ($i = 0; $i < count($arr); $i++) {
    for ($j = count($arr)-1; $j > $i; $j--) {
        if($arr[$j] < $arr[$j-1]){
            $tmp = $arr[$j];
            $arr[$j] = $arr[$j-1];
            $arr[$j-1] = $tmp;
        }
    }
}

 



 

转载于:https://www.cnblogs.com/zenghansen/p/3990040.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值