某知名視頻網(wǎng)站服務(wù)商PHP工程師面試筆試真題及答案_第1頁
某知名視頻網(wǎng)站服務(wù)商PHP工程師面試筆試真題及答案_第2頁
某知名視頻網(wǎng)站服務(wù)商PHP工程師面試筆試真題及答案_第3頁
某知名視頻網(wǎng)站服務(wù)商PHP工程師面試筆試真題及答案_第4頁
某知名視頻網(wǎng)站服務(wù)商PHP工程師面試筆試真題及答案_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

某知名視頻網(wǎng)站服務(wù)商PHP工程師面試筆試真題及答案一、選擇題1、假如何老師看到擺鐘的時(shí)間是17:32,那么此時(shí)時(shí)針與分針的最小夾角是______

A.25°

B.26°

C.28°

D.32°

2、執(zhí)行如下代碼,結(jié)果是______

<?php

$a=-3;

$b=4;

echo$a|$b;

?>

A.-3

B.4

C.-7

D.1

3、如何給變量$a、$b和$c賦值才能使以下程序顯示字符串“hello,World!”?______

<?php

$a=?;

$b=?;

$c=?;

if($a){

if($b&&!$c){

echo"GoodbyeCruelWbrld!";

}elseif(!$b&&!$c){

echo"Nothinghere";

}

}else{

if(!$b){

if(!$a&&(!$b&&$c)){

echo"hello,World!";

}else{

echo"GoodbyeWorld!";

}

}else{

echo"Notquite.";

}

}

?>

A.false,true,false

B.true,true,false

C.false,true,trueD.false,false,true

4、以下程序的運(yùn)行結(jié)果是______

functionsort_my_array($array){

returnsort($array);

}

$al=array(3,2,1);

var_dump(sort_my_array(&$a1));

A.NULL

B.0=>1,1=>2,2=>3

C.一個(gè)引用錯(cuò)誤

D.2=>1,1=>2,0=>3

E.bool(true)

5、考慮如下腳本,標(biāo)記處應(yīng)該添加什么代碼才能讓腳本輸出字符串php?______

<?php

$alpha='abcdefghijklmnopqrstuvwxyz';

$letters=array(15,7,15);

foreach($lettersas$val){

/*這里應(yīng)該加入什么*/

}

?>

A.echochr($val);

B.echoasc($val);

C.echosubstr($alpha,$val,2);

D.echo$alpha[$val];

E.echo$alpha[$val+1]

6、以下程序的運(yùn)行結(jié)果是______

<?php

classa{

functiona(){

echo'parentcalled';

}

}

classb{

functionb(){

}

}

$c=newb();

?>

A.parentcalled

B.一個(gè)錯(cuò)誤

C.一個(gè)警告

D.什么都沒有

7、setcookie("vipname","tom",time()+1000);以下有關(guān)上述代碼的描述中,錯(cuò)誤的是______

A.該代碼設(shè)置了一個(gè)變量名為vipname的Cookie

B.該代碼設(shè)置了一個(gè)變量值為tom的Cookie

C.該變量的存活期限為1000s

D.該變量的存活期限為1s

8、以下是一個(gè)類的聲明,對成員屬性正確的賦值方式是______

<?php

classTest{

private$a;

static$b;

functionsetA($a){

$this->a=$a;

}

}

$test=newtest();

?>

A.$test->a="abc";

B.Test::$b="abc";

C.Test::setA("abc");

D.$test->b="abc";

9、運(yùn)算符“^”的作用是______

A.無效

B.乘方

C.位非

D.位異或

10、在忽略瀏覽器bug的正常情況下,如何用一個(gè)與先前設(shè)置的域名(domain)來訪問新域名中的某個(gè)Cookie?______

A.通過HTTPREMOTECOOKIE訪問

B.不可能

C.在調(diào)用setcookie()時(shí)設(shè)置一個(gè)不同的域名

D.向?yàn)g覽器發(fā)送額外的請求

E.使用Javascript,把Cookie包含在URL中發(fā)送

二、填空題11、Cookie的值存儲在______。

12、______函數(shù)能讓服務(wù)器輸出header:set-Cookie:foo=bar。

13、讓類中的某些方法無法在類的外部或繼承訪問的方法是______。

14、如果在PHP中使用Oracle數(shù)據(jù)庫作為數(shù)據(jù)庫服務(wù)器,那么應(yīng)該在PDO中加載______驅(qū)動(dòng)程序。

15、POST和GET傳輸?shù)淖畲笕萘糠謩e是______和______。

三、簡答題16、sort()函數(shù)、asort()函數(shù)和ksort()函數(shù)有什么區(qū)別?它們分別在什么情況下使用?

17、談?wù)勀銓ookie與Session的理解,它們的適用場景是什么?

18、如何設(shè)計(jì)或配置MySQL,才能達(dá)到高效使用的目的?

19、如果頁面字符出現(xiàn)亂碼,那么該怎么解決?

20、與數(shù)組相關(guān)的常用函數(shù)有哪些?

四、編程題21、寫一個(gè)PHP函數(shù)實(shí)現(xiàn)對array(12,34,9,68,26,95,6,118)的從小到大排序。

22、請寫出將兩個(gè)數(shù)組連接成一個(gè)新數(shù)組的兩種方法。

23、請編寫函數(shù)計(jì)算出兩個(gè)日期之間的天數(shù)。

24、所謂中位數(shù)就是一組數(shù)據(jù)從小到大排列后中間的那個(gè)數(shù)字。如果數(shù)組長度為偶數(shù),那么中位數(shù)的值就是中間兩個(gè)數(shù)字相加除以2,如果數(shù)組長度為奇數(shù),那么中位數(shù)的值就是中間那個(gè)數(shù)字。

答案:

一、選擇題

1、B[解析]

首先,選定一個(gè)參考物,以12點(diǎn)正點(diǎn)刻度順時(shí)針作為參考量,首先算出時(shí)針與該參考量的偏移量,然后算出分針與該參考量的偏移量,二者相減即可求解出時(shí)針與分針的夾角。

眾所周知,時(shí)針行走一圈為360°,合12個(gè)小時(shí),所以,時(shí)針每小時(shí)轉(zhuǎn)動(dòng)的角度值為360°/12=30°,17:32的時(shí)針偏移量為30°*(5+32/60)=166°,即時(shí)針與12點(diǎn)正點(diǎn)時(shí)刻的夾角為166°。分針每走一圈為360°,合1個(gè)小時(shí)(60分鐘),所以,分針每分鐘轉(zhuǎn)動(dòng)的角度值為360°/60=6°,17:32的分針偏移量為6°*32=192°。

時(shí)針與分針的差值即為所求解,192°-166°=26°。

所以,本題的答案為B。2、A[解析]$a和$b通過按位或運(yùn)算(|)運(yùn)算時(shí)會把$a和$b分別進(jìn)行二進(jìn)制運(yùn)算,然后把$a或$b中為1的位設(shè)為1。$a為-3,它的二進(jìn)制為正數(shù)3的補(bǔ)碼即1100,而$b=4,二進(jìn)制數(shù)為0100,所以,$a|$b等價(jià)于(1100)|(0100),它們二進(jìn)制中為1的位數(shù)都設(shè)為1,得到1100,即-3,輸出得到-3。選項(xiàng)A正確。

所以,本題的答案為A。3、D[解析]

因?yàn)椤癶ello,World!”在if($a)的else語句里面,所以$a需要為false才能執(zhí)行else語句里面的內(nèi)容。在else中,由于“hello,World!”在if(!Sb)條件里面,說明!$b需要為真,而$b前面有個(gè)非運(yùn)算符,說明$b為false。而“hello,World!”在if(!$a

&&(!$b&&$c))中,說明條件!$a&&(!$b

&&$c)應(yīng)該為真,“&&”運(yùn)算符要求必須每個(gè)條件都為true才返回true,所以,代入$a=$b=false,可以得到$c為true。選項(xiàng)D正確。

所以,本題的答案為D。4、C[解析]

通過sort_my_array(&$a1)將數(shù)組$a1的引用傳遞到sort_my_array()函數(shù)中排序,這種寫法在PHP5.3版本及以前是支持這樣的格式的,sort()函數(shù)排序成功會返回true,失敗會返回false。而returnsort($array)返回的是排序后的結(jié)果值true,所以var_dump()打印后得到的是bool(true)。但是PHP5.3以后的版本已經(jīng)廢除這樣的寫法,如果在PHP5.3以后的版本中使用這種方法,那么將會報(bào)致命錯(cuò)誤。因此,不建議再使用這種方式值的引用。選項(xiàng)C正確。

所以,本題的答案為C。5、D[解析]

對于選項(xiàng)A,chr()函數(shù)可以從指定的ASCII值中返回對應(yīng)的字符串。而PHP字符串對應(yīng)的ASCII碼并不是15,7,15。選項(xiàng)A錯(cuò)誤。

對于選項(xiàng)B,PHP中不存在asc()函數(shù)。選項(xiàng)B錯(cuò)誤。

對于選項(xiàng)C,substr()函數(shù)可以返回字符串的一部分,substr($alpha,$val,2)的意思是,在$alpha字符串的$val位置中取2個(gè)字符串,最后取出來的值是pqhipq不是php。選項(xiàng)C錯(cuò)誤。

對于選項(xiàng)D,因?yàn)镻HP是弱類型語言,可以把字符串看成數(shù)組進(jìn)行取值,剛好15對應(yīng)$alpha中的p,7對應(yīng)h,所以最終可以輸出php。選項(xiàng)D正確,選項(xiàng)E錯(cuò)誤。

所以,本題的答案為D。6、D[解析]

因?yàn)轭惷秃瘮?shù)名都為b,所以函數(shù)b等價(jià)于構(gòu)造函數(shù),當(dāng)實(shí)例化b時(shí),執(zhí)行函數(shù)b,因?yàn)楹瘮?shù)b的函數(shù)體為空,所以最后結(jié)果什么都沒有。選項(xiàng)D正確。

所以,本題的答案為D。7、D[解析]setcookie()的語法為setcookie(變量名,變量值,有效期),對應(yīng)的是變量名為vipname,變量值為tom,有效期的單位為s,所以為當(dāng)前時(shí)間加上1000s而不是1s。選項(xiàng)D正確。

所以,本題的答案為D。8、B[解析]

對于選項(xiàng)A,因?yàn)?a是私有方法,所以不能在外部執(zhí)行賦值操作。選項(xiàng)A錯(cuò)誤。

對于選項(xiàng)B,要對類中的靜態(tài)常量賦值可以使用“類名::變量”的形式賦值,可以對成員屬性$b賦值。選項(xiàng)B正確。

對于選項(xiàng)C,因?yàn)閟etA()函數(shù)不是一個(gè)靜態(tài)函數(shù),所以不能使用Test::setA()的格式在類外調(diào)用函數(shù),可以使$test->setA("abc")的方式調(diào)用函數(shù)。選項(xiàng)C錯(cuò)誤。

對于選項(xiàng)D,因?yàn)?b是靜態(tài)變量,所以不能使用$this->b方式賦值,賦值方式應(yīng)該為Test::$b="abc"。選項(xiàng)D錯(cuò)誤。

所以,本題的答案為B。9、D[解析]PHP中的“^’表示位異或運(yùn)算符。選項(xiàng)D正確。

所以,本題的答案為D。10、B[解析]domain表示的是Cookie所在的域,默認(rèn)為請求的地址,如網(wǎng)址為/index.php/index/hello,那么domain默認(rèn)為。對于Cookie的跨域名訪問只支持同域名下的多級域名訪問,如域A為,域B為,那么域名A和域名B共同訪問域名A或域名B生成的Cookie,它們的domain都要設(shè)置為.才行。而如果要在域A中生成一個(gè)域名B不能訪問的Cookie,那么只需要將Cookie的domain設(shè)置為。

如果先前設(shè)置了一個(gè)域名domain,讓新域名訪問,那么會存在新域名不在domain的范圍內(nèi),domain的Cookie不能被新域名訪問。選項(xiàng)B正確。

所以,本題的答案為B。二、填空題11、客戶端。12、setcookie()或setrawCookie()。[解析]

由這個(gè)header頭里面的信息set-Cookie知道是對Cookie進(jìn)行設(shè)置,所以可以通過setcookie()或setrawCookie()函數(shù)輸出HTTP發(fā)送Cookie的信息。13、private。14、PDO_OCI。[解析]PDO_OCIisadriverthatimplementsthePHPDataObjects(PDO)interfacetoenableaccessfromPHPtoOracledatabasesthroughtheOCIlibrary。15、POST默認(rèn)是2MB,php.ini可設(shè)置,GET是1KB。[解析]GET是通過URL提交數(shù)據(jù)的,因此,GET可提交的數(shù)據(jù)量就跟URL所能達(dá)到的最大長度有直接關(guān)系。URL不存在參數(shù)上限的問題,HTTP協(xié)議規(guī)范也沒有對URL長度進(jìn)行限制。IE對URL長度的限制是2083B(2KB+35B)。對于其他瀏覽器,例如,F(xiàn)ireFox、Netscape等,則沒有長度限制,這個(gè)時(shí)候其限制取決于服務(wù)器的操作系統(tǒng)。即如果url太長,那么服務(wù)器可能會因?yàn)榘踩矫娴脑O(shè)置從而拒絕請求或者發(fā)生不完整的數(shù)據(jù)請求。

理論上講,POST是沒有大小限制的,HTTP協(xié)議規(guī)范也沒有進(jìn)行大小限制,但實(shí)際上,POST所能傳遞的數(shù)據(jù)量大小取決于服務(wù)器的設(shè)置和內(nèi)存大小。對于PHP語言而言,上傳文件涉及的參數(shù)PHP默認(rèn)的上傳上限為2MB,更改這個(gè)值需要更改php.conf的post_max_size這個(gè)值。三、簡答題16、sort()函數(shù)對索引數(shù)組的鍵值進(jìn)行升序排序并且不保留鍵名,鍵值為字母時(shí)按26字母的順序進(jìn)行排序。

asort()函數(shù)對關(guān)聯(lián)數(shù)組的鍵值進(jìn)行升序排序并且保留鍵名,鍵值為數(shù)字時(shí)按升序進(jìn)行排序。

ksort()函數(shù)對關(guān)聯(lián)數(shù)組按照鍵名進(jìn)行升序排序并且保留鍵名,對一個(gè)數(shù)組排序使用。ksort()函數(shù)時(shí),關(guān)聯(lián)數(shù)組的鍵名主要按照26個(gè)字母的順序進(jìn)行升序排序。

它們的使用情況為,如果對索引數(shù)組進(jìn)行升序排序,不考慮保留原數(shù)組順序鍵名時(shí),那么可以使用sort()函數(shù)進(jìn)行排序。如果是對關(guān)聯(lián)數(shù)組進(jìn)行升序排序,需要按鍵值進(jìn)行升序排序,那么可以使用asort()函數(shù),如果需要按鍵名進(jìn)行升序排序,那么可以使用ksort()函數(shù)。

17、Cookie和Session都是用來解決HTTP無狀態(tài)協(xié)議存在的問題而產(chǎn)生的,為了保證從一個(gè)網(wǎng)頁到另一個(gè)網(wǎng)頁跳轉(zhuǎn)時(shí)可以知道是同一個(gè)用戶進(jìn)行操作。網(wǎng)站可以通過Cookie或Session識別用戶并給予相關(guān)的權(quán)限和顯示內(nèi)容。Cookie主要存儲在客戶端,大小不能超過4KB,安全性沒有Session高。Session主要存儲在服務(wù)端,存儲大小沒有限制且可以存儲比較復(fù)雜的數(shù)據(jù)類型,由于數(shù)據(jù)存儲在服務(wù)器端,因此安全性較高。但是Session依賴于Cookie存儲SessionID,所以如果禁用了Cookie,那么Session沒有辦法正常工作。

它們的適用場景有:

1)用戶登錄時(shí)記住用戶信息和用戶登錄狀態(tài),鎖定用戶給予相關(guān)的信息顯示和權(quán)限。

2)購物車中的商品歸屬,可以鎖定商品信息歸屬對應(yīng)的客戶。

18、1)數(shù)據(jù)庫設(shè)計(jì)方面,設(shè)計(jì)結(jié)構(gòu)良好的數(shù)據(jù)庫,允許部分?jǐn)?shù)據(jù)冗余。

2)選取最適用的字段屬性,盡可能把字段設(shè)置為NOTNULL,這樣在查詢的時(shí)候,數(shù)據(jù)庫不用去比較NULL值。

3)系統(tǒng)架構(gòu)設(shè)計(jì)方面,進(jìn)行表散列,把海量數(shù)據(jù)散列到幾個(gè)不同的表里面,進(jìn)行集群,數(shù)據(jù)庫查詢和寫入分開。

4)編寫高效SQL語句,以提高效率。

5)使用連接(JOIN)來代替子查詢。

6)使用聯(lián)合(UNION)來代替手動(dòng)創(chuàng)建的臨時(shí)表。

7)必要的時(shí)候用不同的存儲引擎,比如InnoDB可以減少死鎖,HEAP可以提高一個(gè)數(shù)量級的查詢速度。

8)合理使用事務(wù)、外鍵和索引。

19、1)首先查看當(dāng)前文件是否設(shè)置了字符集。如果是HTML頁面,那么查看meta標(biāo)簽中是否存在charset設(shè)置文件字符集,如果是PHP頁面,那么可以查看是否在header()函數(shù)中指定了charset設(shè)置文件字符集。

例如,header("content-type:text/html;charset=utf-8");,可以通過該函數(shù)設(shè)置網(wǎng)站編碼。

2)如果通過方法1)發(fā)現(xiàn)已經(jīng)設(shè)置了字符集,那么接下來需要判斷當(dāng)前文件保存的編碼格式是否與頁面設(shè)置的字符集保持一致,如果不一致,那么需要修改保證兩者字符集統(tǒng)一。

3)如果是從數(shù)據(jù)庫取數(shù)據(jù)出現(xiàn)的亂碼,那么需要查看數(shù)據(jù)庫查詢時(shí)設(shè)置的字符集與當(dāng)前頁面設(shè)置的字符集是否一致,并保證兩者字符集統(tǒng)一。對數(shù)據(jù)庫取值設(shè)置編碼的方法為mysql_query("setnamesutf8")。

20、與數(shù)組相關(guān)的常用函數(shù)主要有以下幾個(gè):

1)count()函數(shù),用于計(jì)算數(shù)組中的元素?cái)?shù)量,sizeof()函數(shù)是count()函數(shù)的別名。

2)sort()函數(shù),用于數(shù)組對鍵值進(jìn)行升序排序。

3)in_array()函數(shù),用于檢查數(shù)組中是否存在某個(gè)鍵值。

4)explode()函數(shù)和implode()函數(shù),用于數(shù)組與字符串相互轉(zhuǎn)換。

explode()函數(shù),通過使用一個(gè)分隔符對字符串進(jìn)行切割,返回一個(gè)數(shù)組。例如,通過逗號對字符串進(jìn)行分割成數(shù)組:$arr=implode(",",$String)。

implode()函數(shù),通過設(shè)定一個(gè)連接符,將數(shù)組中的每個(gè)元素連接為一個(gè)字符串。例如,通過逗號對每個(gè)鍵值進(jìn)行分隔拼接成字符串:implode(",","$array")。

5)array_merge()函數(shù),可以將一個(gè)或多個(gè)數(shù)組的元素合并成一個(gè)數(shù)組,一個(gè)數(shù)組的值附加在前一個(gè)數(shù)組的后面,返回合并后的數(shù)組。但是需要注意,如果合并的數(shù)組中存在相同的字符串鍵名,那么后一個(gè)數(shù)組的鍵值會覆蓋前一個(gè)數(shù)組的鍵值。但是,如果是數(shù)字的數(shù)組鍵名,那么不存在后一個(gè)數(shù)組鍵值覆蓋前一個(gè)數(shù)組鍵值的情況。

6)array_unique()函數(shù),用于移除數(shù)組中重復(fù)的值,并返回去除重復(fù)鍵值后的數(shù)組。

7)array_shift()函數(shù),用于刪除數(shù)組中的第一個(gè)值,并且返回被刪除元素的值。

8)array_unshift()函數(shù),用于向數(shù)組的開頭插入新元素。

9)array_push()函數(shù),用于向數(shù)組的尾部插入一個(gè)或多個(gè)元素(入棧),然后返回?cái)?shù)組的長度。

10)array_pop()函數(shù),用于刪除數(shù)組中的最后一個(gè)元素(出棧)。

11)array_reverse()函數(shù),用于把數(shù)組的鍵值反向排序并返回?cái)?shù)組。四、編程題21、可以使用快速排序的算法對數(shù)組進(jìn)行從小到大的排序。

實(shí)現(xiàn)代碼如下:

<?php

$arr=array(12,34,9,68,26,95,6,118);

functionquick_sort($arr){

$length=count($arr);

if($length<=1){

return$arr;

$base_num=$arr[0];

$left=array();

$right=array();

for($i=1;$i<$length;$i++){

if($base_num>$arr[$i]){

$left[]=$arr[$i];

}else{

$right[]=$arr[$i];

}

}

$left=quick_sort($left);

$right=quick_sort($right);

returnarray_merge($left,array($base_num),$right);

}

$newArr=quick_sort($arr);

print_r($newArr);

}

?>

程序的運(yùn)行結(jié)果為

Array([0]=>6[1]=>9[2]=>12[3]=>26[4]=>34[5]=>68[6]=>95[7]=>118)

快速排序的時(shí)間復(fù)雜度最佳情況:T(n)=O(nlogn),最差情況:T(n)=O(n2),平均情況:T(n)=O(nlogn)。

22、把兩個(gè)數(shù)組合并有以下幾種方法。

1)使用array_merge()函數(shù)。

array__merge()函數(shù)可以把一個(gè)或多個(gè)數(shù)組合并為一個(gè)數(shù)組,語法為array_merge($array1,$array2.......)。

實(shí)現(xiàn)代碼如下:

<?php

$arr1=array(1,2,3,"b"=>"a");

$arr2=array(3,4,5,"b"=>"c");

$arr=array_merge_recursive($arr1,$arr2);

print_r($arr);

?>

程序的運(yùn)行結(jié)果為Array([0]=>1[1]=>2[2]=>3[b]=>c[3]=>3[4]=>4[5]=>5)。

2)使用array_merge_recursive()函數(shù)合并。

array_merge_recursive()函數(shù)可以把一個(gè)或多個(gè)數(shù)組合并為一個(gè)數(shù)組,使用方法以及作用和array_merge()函數(shù)一樣。但是在使用array_merge()合并的數(shù)組時(shí),如果存在相同的字符串鍵名,那么后一個(gè)數(shù)組會覆蓋前一個(gè)數(shù)組的鍵值。而使用array_merge_recursive()時(shí),如果存在相同的字符串鍵名,那么在相同鍵名下會合并成一個(gè)新的數(shù)組。

實(shí)現(xiàn)代碼如下:

<?php

$arr1=array(1,2,3,"b"=>"a");

$arr2=array(3,4,5,"b"=>"c");

$arr=array_merge_recursive($arr1,$arr2);

print_r($arr);

?>

程序的運(yùn)行結(jié)果為

Array([0]=>1[1]=>2[2]=>3[b]=>Array([0]=>a[1]=>c)[3]=>3[4]=>4[5]=>5)

3)創(chuàng)建一個(gè)新的數(shù)組,把數(shù)組一和數(shù)組二壓入新數(shù)組中。

可以通過創(chuàng)建一個(gè)新的數(shù)組,對合并的數(shù)組進(jìn)行遍歷依次壓入新數(shù)組中,從而合并數(shù)組。

實(shí)現(xiàn)代碼如下:

<?php

$arr1=array(1,2,3,"b"=>"a");

$arr2=array(3,4,5,"b"=>"c");

$array=array();

foreach($arr1as$k=>$val){

$array[]=$val;

}

foreach($arr2as$k=>$val){

$array[]=$val;

}

print_r($array);

?>

程序的運(yùn)行結(jié)果為Array([0]=>1[1]=>2[2]=>3[3]=>a[4]=>3[5]=>4[6]=>5[7]=>c)。

以上的三種方法中,方法一和方法二使用的是PHP自帶的函數(shù),方法三中需要根據(jù)兩個(gè)數(shù)組的長度依次循環(huán)多次壓入新數(shù)組中,方法一、方法二的執(zhí)行速度比方法三快。

23、可以首先把兩個(gè)日期轉(zhuǎn)換為時(shí)間戳,求出兩個(gè)時(shí)間戳的差值,接著用這個(gè)差值除以一天的秒數(shù)得到天數(shù)的差值,最后通過floor()函數(shù)對計(jì)算結(jié)果向下取整得到天數(shù)。

實(shí)現(xiàn)代碼如下:

<?php

functionbetweenDay($day1,$day2){

$day1=strtotime($day1);

$day2=strtotime($day2);

if($day1<$day2){

$dif=$day2-$day1;

$result=$dif/(24*3600);

}else{

$result=($day1-$day2)/(24*3600);

}

returnfloor($result);

}

echobetweenDay("2017-9-5","2017-9-3");

?>

程序的運(yùn)行結(jié)果為2。

24、根據(jù)定義,如果數(shù)組是一個(gè)已經(jīng)排序好的數(shù)組,那么直接通過索引即可獲取到所需的中位數(shù)。如果題目允許排序,那么本題的關(guān)鍵在于選取一個(gè)合適的排序算法對數(shù)組進(jìn)行排序。一般而言,快速排序的平均時(shí)間復(fù)雜度較低,為O(nlog2n),所以,如果采用排序方法,算法的平均時(shí)間復(fù)雜度為O(nlog2n)。

可是,題目要求不許使用排序算法。那么前一種方法是不可取的。此時(shí),可以換一種思維,使用分治的思想。快速排序算法在每一次局部遞歸后都保證某個(gè)元素左側(cè)的元素的值都比它小,右側(cè)的元素的值都比它大,因此,可以利用這個(gè)思路快速地找到第N大元素,而與快速排序算法不同的是,這個(gè)算法關(guān)注的并不是元素的左右兩邊,而僅僅是某一邊。

根據(jù)快速排序的方法,可以采用一種類似快速排序的方法,找出這個(gè)中位數(shù)來。具體而言,首先把問題轉(zhuǎn)化為求一列數(shù)中第i小的數(shù)的問題,求中位數(shù)就是求一列數(shù)的第(length/2+1)小的數(shù)的問題(其中l(wèi)ength表示的是數(shù)組序列的長度)。

當(dāng)使用一次類快速排序算法后,分割元素的下標(biāo)為pos:

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論