strlen和mb_strlen都是用於獲取字符串長度。
strlen只針對單字節編碼字符,也就是說它計算的是字符串的總字節數。若是是多字節編碼,如 gbk 和 utf-8,使用 strlen 獲得是該字符的總字節數;
可使用mb_strlen獲取其字符個數,使用mb_strlen 要注意兩點,一是要開啓 mbstring 擴展,二是要指定字符集。php
總結:html
示例:mysql
<?php /* strlen( )與 mb_strlen( )的做用分別是什麼(新浪網技術部) */ header('Content-Type:text/html;charset=utf-8'); // (1)英文字符串 $str1 ="duang~"; echo strlen($str1);//總字節數爲6,內部字符編碼,單字節編碼 echo "<br />"; echo mb_strlen($str1);//總字節數爲6,內部字符編碼 echo "<br />"; echo mb_strlen($str1,'utf-8');//總字節數或字符長度爲6,指定字符編碼(utf-8),多字節編碼 echo "<hr />"; // (2)中文字符串 $str2 = "你是個人小蘋果"; echo strlen($str2);//總字節數爲21,內部字符編碼,單字節編碼 echo "<br />"; echo mb_strlen($str2);//總字節數爲21,內部字符編碼 echo "<br />"; echo mb_strlen($str2,'utf-8');//字符長度爲7,指定字符編碼(utf-8),多字節編碼 ?>
方法一,使用 php 內置函數 mb_substr()
方法二,自定義函數,以 utf-8 爲例,以下:web
<?php /* 相關題目 1:實現中文字串截取無亂碼的方法。 */ header('Content-Type:text/html;charset=utf-8'); //=================方法一======================= $str = "你是個人溫暖陽光"; echo mb_substr($str, 2,4,'utf-8');//輸出 個人溫暖 // ================方法二======================= /** * utf8編碼字符串截取無亂碼 * @param $str string 要處理的字符串 * @param $start int 從哪一個位置開始截取 * @param $length int 要截取字符的個數 * @return string 截取後獲得的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } // 示例 $str = "你是個人溫暖陽光"; echo substr_utf8($str,2,4);//輸出 個人溫暖 ?>
方法一,使用php內置函數,確保配置中已打開mbstring擴展
方法二,自定義函數實現求其長度,截取使用上面定義的substr_utf8正則表達式
<?php /* 相關題目 2:如何求解字符串「中國2北333京」的字符數(一箇中文一個字符),並找到第四個字符「北」 */ header('Content-Type:text/html;charset=utf-8'); //=================方法一======================= $str = "中國2北333京"; echo mb_strlen($str,'utf-8');//輸出字符數 8 echo mb_substr($str, 3,1,'utf-8');//輸出 北 // ================方法二======================= /** * utf8編碼字符串截取無亂碼 * @param $str string 要處理的字符串 * @param $start int 從哪一個位置開始截取 * @param $length int 要截取字符的個數 * @return string 截取後獲得的字符串 */ function substr_utf8($str,$start,$length = null) { $sep = ""; $arr = array_slice(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY), $start,$length); return join($sep,$arr); } /** * utf8編碼字符串計算長度 * @param $str string 要處理的字符串 * @return int 字符串的長度或字符個數 */ function strlen_utf8($str) { return count(preg_split("//u", $str,-1,PREG_SPLIT_NO_EMPTY)); } // 示例 $str = "中國2北333京"; echo strlen_utf8($str);//輸出字符數 8 echo substr_utf8($str,3,1);//輸出 北 ?>
A. split
B. implode
C. explode
D. join
答案:Asql
<?php /* 寫出下列程序的輸出結果(新浪網技術部) */ $x = 87; $y = ($x % 7) * 16; $z = $x > $y ? 1 : 0; echo $z; ?>
答案:1數據庫
$_SERVER['DOCUMENT_ROOT']//當前運行腳本所在的文檔根目錄 $_SERVER['HTTP_HOST ']//當前請求的 Host: 頭部的內容 $_SERVER['REMOTE_ADDR']//正在瀏覽當前頁面用戶的 IP 地址 $_SERVER['HTTP_REFERER']//連接到當前頁面的前一頁面的 URL 地址 $_SERVER['SERVER_NAME']//當前運行腳本所在服務器主機的名稱 $_FILES //包含有全部上傳的文件信息 S_FILES['userfile']['name']//客戶端機器文件的原名稱 $_FILES['userfile']['type']//文件 MIME 類型,若是瀏覽器提供此信息的話,如「image/gif」。 $_FILES['userfile']['size']//已上傳文件的大小,單位爲字節 $_FILES['userfile']['tmp_name']//文件被上傳後在服務端儲存的臨時文件名 $_FILES['userfile']['error']//和該文件上傳相關的錯誤代碼
兩者區別只有一個,那就是對包含文件的需求程度。include 就是包含,若是被包含的文件不存在的話,那麼則會提示一個錯誤,可是程序會繼續執行下去。而 require 意思是須要,若是被包含文件不存在或者沒法打開的時候,則會提示錯誤,而且會終止程序的執行。
這兩種結構除了在如何處理失敗以外徹底同樣。
once 的意思是一次,那麼 include_once 和 require_once 表示只包含一次,避免重複包含。apache
別是_;爲了不屢次包含同一文件,能夠用語句_來代替它們。
在如何處理失敗時,include()產生一個警告而require()則致使一個致命錯誤;require_once()/include_once()數組
include、require瀏覽器
<?php /* 6. 用最少的代碼寫一個求 3 值最大值的函數. (51.com 筆試題) */ // 定義函數 function maxnum($a,$b,$c) { return $a > $b ? ($a > $c ? $a : $c) : ($b > $c ? $b : $c); } // 調用實例 echo maxnum(24,15,8); ?>
POST 根據你 php.ini 文件配置(默認是 8M)
GET 的話大小限制在 2KB
get 是發送請求 HTTP 協議經過 url 參數傳遞進行接收,而 post 是實體數據,能夠經過表單提交大量信息。
A.php:
<?php function fa(){ echo "in Function A\n"; } ?>
B.php:
<?php include 'a.php'; function fb() { fa(); echo "in Function B\n"; } ?>
C.php:
<?php include 'a.php'; include 'b.php'; fa(); fb(); ?>
答案:存在問題,a.php 被包含了兩次,致使 fa()函數重複定義,使用 include_once 避免重複包含。
echo, print是PHP語句print_r是函數,語句沒有返回值,函數能夠有返回值(即使沒有用)
print只能打印出簡單類型變量的值(如int,string)
print_r能夠打印出複雜類型變量的值(如數組,對象)
echo -- 輸出一個或者多個字符串
print --輸出一個字符串
print_r -- 打印關於變量的易於理解的信息。
在實際使用中, print 和 echo 二者的功能幾乎是徹底同樣。
能夠這麼說,凡有一個可使用的地方,另外一個也可使用。可是,二者之間也仍是一個很是重要的區別:
在 echo 函數中,能夠同時輸出多個字符串,而在 print 函數中則只能夠同時輸出一個字符串。同時,echo函數並不須要圓括號,因此echo函數更像是語句而不像是函數。
echo 和 print 都不是函數,而是語言結構,因此圓括號都不是必需的。他們的區別在於:
(1) echo能夠輸出多個字符串,像下面這樣:
echo 'a','b','c';
若是你非要加上圓括號,注意寫成echo ('a','b','c');是錯誤的,應該寫成:
echo ('a'),('b'),('c');
它沒有像函數的行爲,因此不能用於函數的上下文
(2) print只能輸出一個字符串,它能夠表現得像一個函數,好比你能夠以下使用:
$ret = print 'Hello World';
(有返回值因此可以用在更復雜的表達式中,能夠判斷是否輸出成功等表達式)因此它能用在更復雜的表達式中。
另外,echo的效率相對比較快~
以下代碼:
<?php $a='hello '; $b='php world!'; echo $a,$b.'<br />';//echo 能夠用逗號分隔字符串變量來顯示 print $a.$b.'<br />';//而print不能使用逗號,只能用點號分隔 print $a,$b.'<br />';//使用逗號時報錯。 ?>
說明:
,
是 echo 自己支持的一種語法,而.
則是字符串鏈接操做符,使用,
的效率要高一些。(少了鏈接運算),
來分隔字符串變量,也可使用,
來分隔字符串變量;print只能使用.
來分隔字符串變量。總結:
echo命令和print命令相同,沒有區別
echo()和print()有區別:
echo()沒有返回值,與echo命令相同
print()有返回值,老是返回1
補充:
printf()和sprintf()相似,均爲格式化輸出,不一樣的是前者輸出到標準輸出,後者輸出到變量
answer: print is a function,echo is a language construct
<?php /* 用 PHP 打印出前一天的時間格式是 2006-5-10 22:21:21。 */ // ================方法一================== echo date("Y-m-d H:i:s",time() - 3600*24); echo "<br />"; // ================方法二================== echo date("Y-m-d H:i:s",strtotime("-1 day")); echo "<br />"; // 將表單中提交的時間字符串"2015-6-23"轉成時間戳 $date = strtotime("2015-6-23"); echo $date; ?>
說明:
(strtotime("2009-4-4")-strtotime("2009-3-1"))/3600*24
<?php /* 不使用第三個變量交換兩個變量的值 */ // ================方法一================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; list($a,$b) = array($b,$a); echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; echo "<hr />"; // ================方法二================== $a = "PHP"; $b = "MySQL"; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; $a = $a.'&'.$b;//使用&鏈接兩個字符串 // 根據&進行字符串分割 $b = explode('&', $a); $a = $b[1]; $b = $b[0]; echo '$a='.$a.'<br />'; echo '$b='.$b.'<br />'; ?>
&
符號加到將要賦值的變量前(源變量)。<?php $num = 10; function multipy($num){ $num = $num +10; } multipy($num); echo $num; ?>
輸出 10
reference 傳送的是變量的地址而非它的值,因此在函數中改變一個變量的值時,整個應用都見到這個變量的新值。
一個 regular variable 傳送給函數的是它的值,當函數改變這個變量的值時,只有這個函數才見到新值,應用的其餘部分仍然見到舊值。
<?php $str ='1234567890'; function str($str) { // 反轉字符串,獲得0987654321 $str = strrev($str); // 使用逗號分割字符串,獲得098,765,432,1, $str = chunk_split($str,3,','); // 再次反轉字符串,獲得,1,234,567,890 $str = strrev($str); // 去掉左邊的",",獲得1,234,567,890 $str = ltrim($str,','); return $str; } echo str($str); ?>
strrev(),不過這種方法都不能解決中文字符串翻轉的問題,會出錯的。
<?php header("Content-Type:text/html;charset=utf-8"); /** * 反轉utf8編碼的中文字符串 * @param string $str * @return string */ function strrev_utf8($str) { return join("",array_reverse(preg_split("//u", $str))); } // 實例 $str = "悄悄是別離的笙簫"; echo strrev_utf8($str); ?>
<?php $str = "www.baidu.com"; echo strrev(str_replace('www','',$str)); ?>
客戶端 IP:$_SERVER["REMOTE_ADDR"]
服務器端 IP:$_SERVER["SERVER_ADDR"]
獲取當前執行腳本路徑使用$_SERVER["SCRIPT_FILENAME"]
或__FILE__
獲取參數,使用$_SERVER["QUERY_STRING"]
foo() 會執行這個函式,任何解譯錯誤、語法錯誤、執行錯誤都會在頁面上顯示出來。
@foo() 在執行這個函式時,會隱藏全部上述的錯誤訊息。
不少應用程序都使用 @mysql_connect() 和 @mysql_query 來隱藏 mysql 的錯誤信息,這是不對的,由於錯誤不應被隱藏,你必須妥善處理它們,可能的話解決它們。
A. $users[ ] = "john";
B. array_add($users, "john");
C. array_push($users, "john");
D. $users ||= "john" ;
答案:BD
isset 檢測一個變量是否設置
empty 檢測是否爲空
注意兩者的區別,若是 變量 是非空或非零的值,則 empty() 返回 FALSE。換句話說,""、0、"0"、NULL、FALSE、array() 以及沒有任何屬性的對象都將被認爲是空的。
isset是檢測變量是否設置/定義,empty是檢測已定義的變量的值是否爲空。
當前腳本名稱:$_SERVER["PHP_SELF"]或者 $_SERVER["SCRIPT_NAME"];
連接到當前頁面的前一頁面的 URL 地址:$_SERVER["HTTP_REFERER"]。
sort(),根據數組中元素的值,以英文字母順序排序,索引鍵會由 0 到 n-1 從新編號。主要是當數組索引鍵的值可有可無時用來把數組排序。
assort(),PHP 沒有 assort() 函式,因此多是 asort() 的筆誤。
asort(),對數組進行排序,數組的索引保持和單元的關聯。主要用於對那些單元順序很重要的結合數組進行排序。
ksort(),根據數組中索引鍵的值,以英文字母順序排序,特別適合用於但願把索引鍵排序的關聯數組。
打開或者關閉錯誤報告,如:
error_reporting(0);
error_reporting(E_ALL & ~ E_NOTICE);
error_reporting(E_ALL);
2047 = 1 + 2 + 4 + 8 + 16 + 32 + 64 + 128 + 256 + 512 + 1024
其中:
1 對應 E_ERROR,2 對應 E_WARNING,4 對應 E_PARSE,
8 對應 E_NOTICE,16 對應 E_CORE_ERROR,32 對應 E_CORE_WARNING
,64 對應 E_COMPILE_ERROR,128對應 E_COMPILE_WARNING,256 對應 E_USER_ERROR,
512 對應 E_USER_WARNING,1024 對應 E_USER_NOTICE。
error_reporting(2047)意味着上述錯誤都會顯示出來。
<?php $str = 'cd'; $$str = 'hotdog';//$cd = 'hotdog'; $$str .= 'ok';//$cd .= 'ok'; echo $cd; ?>
hotdogok
獲取一個普通變量的值做爲這個可變變量的變量名。
定義常量:define()
檢測常量是否認義:defined()
如:
define("TEST","happy new year!"); if( defined("TEST")){ echo TEST; }
<?php echo 8%(-2) ?>
將輸出$a % $b
其結果的正負取決於 $a 的符號。echo ((-8)%3)."<br />";//輸出 -2
echo (8%(-3))."<br />";//輸出 2
arsort:對數組進行逆向排序並保持索引關係
error_reporting(2047)的做用 report All errors and warnings,見 21 題中相關題目。
LoadModule php5_module "c:/php/php5apache2.dll";
AddType application/x-httpd-php .php
allow_call_time_pass_reference :是否啓用在函數調用時強制參數被按照引用傳遞,默認關閉。
echo count("abc")
; 輸出什麼?(新浪?)輸出 1
count :計算數組中的單元數目或對象中的屬性個數,一般是一個 array,任何其它類型都只有一個單元。
對於對象,若是安裝了 SPL,能夠經過實現 Countable 接口來調用 count()。該接口只有一個方法 count(),此方法返回 count() 函數的返回值。
若是 var 不是數組類型或者實現了 Countable 接口的對象,將返回 1,有一個例外,若是 var 是 NULL 則結果是 0。
<?php echo count(strlen("http://php.net")); ?>
answer: 1
<?php /** * 根據某列對二維數組進行排序 * @param $arr array 要排序的二維數組 * @param $row string 排序依據的某列 * @param $type string asc表示正序,爲默認值;desc表示逆序 * @param array 返回排序後的二維數組 */ function array_sort($arr,$row,$type ='asc') { $arr_temp = array(); // 將排序依據做爲數組的鍵名 foreach ($arr as $v) { $arr_temp[$v[$row]] = $v; } // print_r($arr_temp); // 按照鍵名對二維數組進行排序,並保持索引關係 if ($type == 'asc') { ksort($arr_temp); } elseif($type == 'desc') { krsort($arr_temp); } // 返回排序結果 return $arr_temp; } // 實例 $person = array( array('id'=>2,'name'=>'zhangsan','age'=>23), array('id'=>5,'name'=>'lisi','age'=>28), array('id'=>3,'name'=>'apple','age'=>17) ); echo "<pre>before:<br />"; print_r($person); echo "</pre>"; echo "<hr />"; $person2 = array_sort($person,'name'); echo "<pre>after:<br />"; print_r($person2); echo "</pre>"; ?>
<?php /* 寫 5 個不一樣的本身的函數,來獲取一個全路徑的文件的擴展名,容許封裝 php 庫中已有的函數。(新浪) */ // 方法一 function ext_name1($path){ $path_info = strrchr($path, '.');//.php return ltrim($path_info,'.'); } // 方法二 function ext_name2($path){ $path_info = substr($path,strrpos($path, '.')); return ltrim($path_info,'.'); } // 方法三 function ext_name3($path){ $path_info = pathinfo($path); return $path_info['extension']; } // 方法四 function ext_name4($path){ $arr = explode('.', $path); return $arr[count($arr)-1]; } // 方法五 function ext_name5($path){ $pattern = '/^[^\.]+\.([\w]+)$/'; return preg_replace($pattern, '${1}', basename($path)); } // 實例 $path = str_replace('\\', '/', __FILE__); echo "$path<br />"; echo ext_name1($path);echo "<br />"; echo ext_name2($path);echo "<br />"; echo ext_name3($path);echo "<br />"; echo ext_name4($path);echo "<br />"; echo ext_name5($path);echo "<br />"; ?>
PHP( Hypertext Preprocessor,超文本預處理器的字母縮寫)是一種被普遍應用的開放源代碼的多用途腳本語言,它可嵌入到 HTML 中,尤爲適合 web 開發。
PHP 主要是用於服務端的腳本程序,所以能夠用 PHP 來完成任何其它的 CGI 程序可以完成的工做,例如收集表單數據,生成動態網頁,或者發送/接收Cookies。但 PHP 的功能遠不侷限於此。
PHP 腳本主要用於如下三個領域:
你可使用 PHP 中任何一種輸出語句,包括 echo、print、printf,大部分人都使用以下例的 echo:
echo "My string $variable";
你也可使用這種方法:
echo <<<END This text is written to the screen as output and this $variable is parsed too. If you wanted you can have <span> HTML tags in here as well.</span> The END; remarks must be on a line of itsown, and can't contain any extra white space. END;
<?php $b = 201; $c = 40; $a = $b > $c ? 4 : 5; echo $a; ?>
輸出結果爲 4
$arr = array('james', 'tom', 'symfony');
請打印出第一個元素的值,並請將數組的值用','號分隔併合併成字串輸出。echo $arr[0];
echo implode(',',$arr);
echo $a{0} 或 echo $a[0]
值是 e
=== 表示全等,是指的兩個變量的值和類型都相等。
如 if (strpos('abc','a') == false) 和 if (strpos('abc','a') === false)
A. printf("%.2d\n", 42);
B. printf("%1.2f\n", 42);
C. printf("%1.2u\n", 42);
answer:B
A. print substr($text, strchr($text, ':'));
B. print substr($text, strchr($text, ':') + 1);
C. print substr($text, strpos($text, ':') + 1);
D. print substr($text, strpos($text, ':') + 2);
E. print substr($text, 0, strchr($text, ':'));
answer:C
分析:
<?php $text = 'Content-Type:text/xml'; print substr($text, strchr($text,':'));//出錯,strchr返回的是字符串 echo "<br />"; print substr($text, strchr($text,':')+1);//strchr返回的是字符串,字符串+1,返回ontent-Type:text/xml echo "<br />"; print substr($text, strpos($text,':')+1);//返回text/xml echo "<br />"; print substr($text, strpos($text,':')+2);//返回ext/xml echo "<br />"; print substr($text, 0,strchr($text,':'));//出錯,strchr返回的是字符串 echo "<br />"; ?>
<?php $a = in_array('01',array('1')) == var_dump('01' == 1); ?>
A. True
B. False
answer:A
<?php function timesTwo($int) { $int = $int * 2; } $int = 2; $result = timesTwo($int); ?>
answer: NULL
A. Using the strpos function
B. Using the == operator
C. Using strcasecmp()
D. Using strcmp()
answer:C
<?php /* 運行如下程序,$a 的值是多少? */ $a = "hello"; $b = &$a; unset($b); $b = "world"; echo $a,$b; ?>
answer:hello
<?php /* 運行如下程序,$b的值是多少? */ $a = 1; $b = $a++; echo $a,$b; ?>
answer:1
<?php /* 運行如下程序,$x 的值是多少? */ $array = array(); $x = empty($array); echo $x ? "true":"false"; ?>
answer:ture
使用 intval 函數,echo intval("09"),或者使用 int 強制類型轉換。
<?php /** * 字符串轉換,如open_door->OpenDoor,make_by_id->MakeById * @param $str string 要轉換的字符串 * @return string 轉換後的字符串 */ function change_str($str){ $arr = explode('_',$str);//將以「_」間隔的字符串拆分紅數組的單元 $arr = array_map('ucfirst', $arr);//每一個數組單元的首個字符大寫 return implode('', $arr);//將數組單元合併輸出字符串 } // 實例 $str1 = 'open_door'; $str2 = 'make_by_id'; echo change_str($str1);//OpenDoor echo change_str($str2);//MakeById ?>
<?php $arr1 = array( '0' => array('fid' => 1,'tid' =>1,'name' => 'Name1'), '1' => array('fid' => 1,'tid' =>2,'name' => 'Name2'), '2' => array('fid' => 1,'tid' =>5,'name' => 'Name3'), '3' => array('fid' => 1,'tid' =>7,'name' => 'Name4'), '4' => array('fid' => 3,'tid' =>9,'name' => 'Name5') ); // ======================================================= $arr_tmp = array(); $arr2 = array(); foreach ($arr1 as $v) { // 方法一 $arr_tmp[$v['fid']][] = array_slice($v, 1); // 方法二 /* $arr_tmp[$v['fid']][] = array( 'tid' => $v['tid'], 'name' => $v['name'] ) */ } foreach ($arr_tmp as $v) { $arr2[] = $v; } print_r($arr1); print_r($arr2); ?>
<?php $array = array ('a', 'b', 'c', 'd'); ?>
A. array_flip()
B. array_reverse()
C. sort()
D. rsort()
答案:BD
array(2,5,7)
max 用法示例以下:
<?php echo max(1,3,5,6,7);//7 echo "<br />"; echo max(array(2,4,5));//5 echo "<br />"; echo max(0,'hello');//0 echo "<br />"; echo max('hello','0');//hello echo "<br />"; echo max(-1,'hello');//hello echo "<br />"; //對於多個數組,max從左向右比較 //所以在本例中:2 == 2,可是4 < 5 $val = max(array(2,4,8),array(2,5,7));//array(2,5,7) var_dump($val); echo "<br />"; // 若是同時給出數組和非數組做爲參數,則老是將數組視爲最大值返回 $val = max('string', array(2, 5, 7), 42); var_dump($val); ?>
define("MYPI",3.14);
雙引號串中的內容能夠被解釋並且替換,而單引號串中的內容總被認爲是普通字符。
使用 Switch 語句能夠避免冗長的 if..elseif..else 代碼塊,case只能處理整數,或者能像整數同樣運算的類型,好比char,使用時case 後用'',注意 break不能少,default是爲了處理一些以前沒有包含到的狀況,這樣更爲安全。
date_default_timezone_set('PRC');
echo date("Y-m-d H:i:s",time());
GB2312 支持的漢字較少,GBK 是相比 GB2312 漢字更爲豐富,包括所有中日韓漢字,GB18030 相比 GBK 增長了一些少數名族漢字漢字庫更爲多樣,可是常人很難用到,通常簡體中文使用 GBK 而繁體中文使用 BIG5。
$text = 'gdfgfdgd59gmkblg'; echo substr_count ( $text,'g');
print_r $val = 333;
// error,print_r 是一個函數,需加上括號,若是是 print 則能夠
print_r($val = 333);
// 正確
$a += ($b = 4) + 5;
// notice,$a 未定義,但能夠正確運行
$foo[bar] = 'enemy';
// notice,最好 bar 加上引號
function x($a = "1", $b){}
// 無,但給參數默認值應儘可能從右向左
<?php header("Content-type:text/html;charset=utf-8"); $str1 = null; $str2 = false; echo $str1 == $str2 ? '相等' : '不相等';//相等 $str3 = ''; $str4 = 0; echo $str3 == $str4 ? '相等' : '不相等';//相等 $str5 = 0; $str6 = '0'; echo $str1 === $str2 ? '相等' : '不相等';//相等 ?>
<?php $a1 = null; $a2 = false; $a3 = 0; $a4 = ''; $a5 = '0'; $a6 = 'null'; $a7 = array(); $a8 = array(array()); echo empty($a1) ? 'true' : 'false';//ture echo '<br />'; echo empty($a2) ? 'true' : 'false';//ture echo '<br />'; echo empty($a3) ? 'true' : 'false';//ture echo '<br />'; echo empty($a4) ? 'true' : 'false';//ture echo '<br />'; echo empty($a5) ? 'true' : 'false';//ture echo '<br />'; echo empty($a6) ? 'true' : 'false';//false echo '<br />'; echo empty($a7) ? 'true' : 'false';//ture echo '<br />'; echo empty($a8) ? 'true' : 'false';//false ?>
<?php $test = 'aaaa'; $abc = &$test; unset($test); echo $abc; ?>
aaaa
<?php $count = 5; function get_count() { static $count = 0; return $count++; } echo $count;//5 ++$count;//6 echo get_count();//0 echo get_count();//1 ?>
501
分析:
在 PHP 中,做用域是不重疊的,函數以外的是全局變量,函數內部定義的則是局部變量,兩者是兩個不一樣的變量,除非在函數內使用 global 顯式聲明使用全局變量或直接用$_GLOBALS 來引用。
<?php $GLOBALS['var1'] = 5; $var2 = 1; function get_value() { global $var2; $var1 = 0; return $var2++; } get_value(); echo $var1;//5 echo $var2;//2 ?>
52
<?php function get_arr() { unset($arr[0]); } $arr1 = array(1,2); $arr2 = array(1,2); get_arr(&$arr1); get_arr($arr2); echo count($arr1);//1 echo count($arr2);//2 ?>
12
array_unshift($arr,’jack’); echo $arr[0];
echo implode(‘,’,$arr);
$arr = explode(‘,’,$str);
arsort($arr); print_r($arr);
echo strstr($mail,'163'); echo substr($mail,7); echo substr($mail, strpos($mail, '@')+1); $arr = explode("@",$mail); echo $arr[1];
// 註釋內容
C 風格的單行註釋
# 註釋內容
unix 風格的單行註釋
/* 註釋內容 */
C 風格的多行註釋
global $a 或者 $GLOBALS['a']
aa is 'aa'
<?php $a = '123'; $a = (int)$a; //第一種方式 $a = intval($a); //第二種方式 settype($a,'int'); //第三種方式 ?>
break 和 continue 能夠用在 switch 語句中,或是循環結構中
它們的區別主要是體如今循環語句中,break 表示 跳出整個循環,再也不執行,循環將終止,而 continue 則表示跳出本次循環,繼續下一次的循環,不會終止循環。
當使用默認參數時,任何默認參數必須放在任何非默認參數的右側;不然,函數將不會按照預期的狀況工做。
$arr[ ] = $value; array_push($arr, $value);
array --聲明一個數組
count -- 計算數組中的單元數目或對象中的屬性個數
foreach -- 遍歷數組
list -- 將數組中元素的值賦值給變量,批量聲明變量
explode -- 將字符串轉成數組
implode -- 將數組轉成一個新字符串
array_merge -- 合併一個或多個數組
is_array -- 檢查是不是數組
print_r -- 輸出數組
sort -- 數組排序
array_keys -- 返回數組中全部的鍵名
array_values -- 返回數組中全部的值
key -- 從關聯數組中取得鍵名
trim()-- 去除字符串首尾處的空白字符(或者其餘字符)
strlen()-- 字符串長度
substr()-- 截取字符串
str_replace()-- 替換字符串函數
strstr()-- 查找字符串的首次出現位置,返回 第一次出現的位置開始到結尾的字符串
explode()-- 將字符串分割成數組
implode()-- 將數組分割成字符串
str_repeat() -- 重複一個字符串
addslashes() -- 轉義字符串
htmlspecialchars() -- HTML 實體轉義
<?php $srcArray=array('a','b','c','d'); $randValue=array_rand($srcArray); $result=is_string($randValue); ?>
A. a
B. false
C. true
D. b
E. c
答案:B
mixed array_rand( array $input [, int $num_req ] )
從數組中隨機取出一個或多個單元,它接受 input 做爲輸入數組和一個可選的參數num_req,指明瞭你想取出多少個單元 - 若是沒有指定,默認爲 1。
若是你只取出一個,array_rand() 返回一個隨機單元的鍵名,不然就返回一個包含隨機鍵名的數組。
因此使用 array_rand 函數,返回結果要麼是鍵名,要麼是數組,在這個例子中,數組是索引數組,因此返回的是整型。
<?php $a= '01'; $result = 1; if (in_array($a,array('1'))) { $result = 2; }elseif ($a == '1') { $result = 3; }elseif ($a == '01') { $result = 4; }else{ $result = 5; } echo $result; ?>
A. 1
B. 2
C. 3
D. 4
E. 5
答案:B
A. 不區分
B. 區分
答案:A
函數名是大小寫無關的,不過在調用函數的時候,一般使用其在定義時相同的形式。
<?php $x = ''; $result = is_null($x); ?>
A. null
B. true
C. false
D. 1
答案:C
is_null -- 檢測變量是否爲 NULL,若是變量是 null 則返回 TRUE,不然返回 FALSE。
在下列狀況下一個變量被認爲是 NULL:
<?php function reverse($str) { $arr = explode(' ',$str); $arr = array_reverse($arr); return implode(' ',$arr); } $str = 'This is PHP'; echo reverse($str); ?>
$_ENV;
$_SERVER;
$_REQUEST;
$_FILES;
$_SESSION;
$_COOKIE;
$_GET;
$_POST;
$GLOBALS;
使用 in_array 函數,代碼以下:
<?php $a = array( array('id' => 0), array('id' => 1), array('id' => 2), array('id' => 3), array('id' => 4), array('id' => 500) ); $b = array('id' => 500); if (in_array($b,$a)) { echo "Yes"; }else{ echo "No"; } ?>
使用 array_merge()函數
<?php $a = $b = $c = 0; $a = $b && $c; ?>
$a 爲 false,$b = $c = 0