解決辦法一:
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站制作服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)棗莊免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上千家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
$newarr不要用靜態(tài)數(shù)組,而是在每次遞歸調(diào)用后把返回值(數(shù)組)與上一層的$newarr進(jìn)行合并即可,這樣的話不管調(diào)用多少次,$newarr都不會(huì)保留上次的值
function?unless($arr,?$fid?=?0){
$newarr=array();
foreach?($arr?as?$v){
if?($v["pid"]?==?$fid){
$newarr[]?=?$v;
$newarr=array_merge($newarr,unless($arr,?$v["did"]));
}
}
return?$newarr;
}
解決辦法二:
如果參數(shù)$fid只有在首次運(yùn)行(非遞歸)是為0,在遞歸調(diào)用時(shí)都不是0,那么可以根據(jù)這個(gè)在首次運(yùn)行時(shí)重新初始化$newarr,這樣在外部多次調(diào)用這個(gè)函數(shù)都不會(huì)保留上次的值
function?unless($arr,?$fid?=?0){
static?$newarr=array();
if($fid==0)$newarr=array();
foreach?($arr?as?$v){
if?($v["pid"]?==?$fid){
$newarr[]?=?$v;
unless($arr,?$v["did"]);
}
}
return?$newarr;
}
如果在遞歸的時(shí)候$fid仍然有可能是0,那么可以新增加一個(gè)參數(shù),用來標(biāo)記是否首次運(yùn)行:
function?unless($arr,?$fid?=?0,?$x=0){
static?$newarr=array();
if($x==0)$newarr=array();
foreach?($arr?as?$v){
if?($v["pid"]?==?$fid){
$newarr[]?=?$v;
unless($arr,?$v["did"],?1);
}
}
return?$newarr;
}
php中static 靜態(tài)變量和普通變量的區(qū)別:
在變量的前面加上static 就構(gòu)成了靜態(tài)變量(static 變量)。
static變量和普通變量的區(qū)別在于非靜態(tài)全局變量的作用域是整個(gè)源程序,當(dāng)一個(gè)源程序由多個(gè)源文件組成時(shí),非靜態(tài)的全局變量在各個(gè)源文件中都是有效的。 而靜態(tài)全局變量則限制了其作用域, 即只在定義該變量的源文件內(nèi)有效, 在同一源程序的其它源文件中不能使用它。由于靜態(tài)全局變量的作用域局限于一個(gè)源文件內(nèi),只能為該源文件內(nèi)的函數(shù)公用, 因此可以避免在其它源文件中引起錯(cuò)誤。
static變量和普通變量的區(qū)別:
static全局變量與普通全局變量區(qū)別:static全局變量只初使化一次,防止在其他文件單元中被引用;
static局部變量和普通局部變量區(qū)別:static局部變量只被初始化一次,下一次依據(jù)上一次結(jié)果值;
static函數(shù)與普通函數(shù)區(qū)別:static函數(shù)在內(nèi)存中只有一份,普通函數(shù)在每個(gè)被調(diào)用中維持一份拷貝。
在全局變量之前加上關(guān)鍵字static,全局變量就被定義成為一個(gè)全局靜態(tài)變量。
1)內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)(靜態(tài)存儲(chǔ)區(qū)在整個(gè)程序運(yùn)行期間都存在)
2)初始化:未經(jīng)初始化的全局靜態(tài)變量會(huì)被程序自動(dòng)初始化為0(自動(dòng)對象的值是任意的,除非他被顯示初始化)
3)作用域:全局靜態(tài)變量在聲明他的文件之外是不可見的。準(zhǔn)確地講從定義之處開始到文件結(jié)尾。
static 變量的好處:
不會(huì)被其他文件所訪問,修改其他文件中可以使用相同名字的變量,不會(huì)發(fā)生沖突。
內(nèi)存中的位置:靜態(tài)存儲(chǔ)區(qū)。
變量值,所在使用過程中不相同。
1、php中靜態(tài)和靜態(tài)變量兩者的變量值是不相同的。
2、兩者在所在使用過程中也是不相同,是兩種不同項(xiàng)目的使用標(biāo)準(zhǔn)。
一、靜態(tài)化的優(yōu)點(diǎn):
1有利于搜索引擎收錄網(wǎng)站頁面的信息:搜索引擎更喜歡靜態(tài)的,更變于抓取,搜索引擎SEO排名會(huì)更容易提高。
2靜態(tài)網(wǎng)頁化網(wǎng)頁穩(wěn)定
3可以提高網(wǎng)頁加載速度
4減輕服務(wù)器負(fù)擔(dān),瀏覽器不需要頻發(fā)調(diào)用數(shù)據(jù)庫。
5數(shù)據(jù)庫出錯(cuò)不會(huì)影響正常訪問
二、偽靜態(tài)
PHP偽靜態(tài):是利用Apache mod_rewite實(shí)現(xiàn)url重寫的方法
改寫訪問地址,能夠通過URL的PATHINFO模式來改動(dòng)它。讓它看上去更像一個(gè)靜態(tài)頁面。從而有更大的幾率被搜索引擎抓取和收錄,僅是對搜索引擎比較友好,偽靜態(tài)化
三、純靜態(tài)化
純靜態(tài)化,就是生成HTML文件的方式,我們須要開啟PHP自帶的緩存機(jī)制,即ob_start來開啟緩存。而且在ob_start之前不能有不論什么輸出,否則運(yùn)行失敗,然后我們用ob_get_contents函數(shù)來獲取緩存中的內(nèi)容,該函數(shù)會(huì)返回一個(gè)字符串。第三個(gè)函數(shù)就是ob_end_clean,它用來清空緩存中的內(nèi)容而且關(guān)閉,成功返回True,失敗返回False。
?php
if(file_exists("match.html") (time()-filemtime("match.html"))300)
{
//如果存在對應(yīng)的靜態(tài)文件,則直接訪問
require_once("match.html");
}else{
//這里用數(shù)組來仿真數(shù)據(jù)庫操作,現(xiàn)實(shí)一般都是操作數(shù)據(jù)庫得到對應(yīng)數(shù)據(jù)
$student = array("huangxing","chenyuwei",'xufei','zhangjingwen','xuepei');
ob_start();
//載入模板
require_once("muban.php");
file_put_contents("match.html",ob_get_clean());
require_once('match.html');
}