@這是小豪的第六篇文章(其實也不算文章哈哈)
差不多是 2017 年年底的時候接觸的 PHP,也沒有系統正式的學習過任何基礎,當時直接上手了一個 Thinkphp5.0 的商城專案,還是二次開發,在之後的時間裡我所有的 PHP 開發思維全部固化在第一個專案裡面,模仿….一味的模仿,專案開發框架也一直是 Thinkphp5.0,沒有任何改變。
在四個月前,我依然是這樣。就連專案中出現的 PHP 函式也只是自己所熟悉的函式的組合,沒有願意去發掘新的自己所不熟知的東西,一直這樣,學習也是,東學西學,啥也沒學到。
我都知道自己的問題所在,但是總是不願意跳出自己的舒適區,總以自己還年輕,可以慢慢來當作藉口,其實都是屁話。
一直沒有進步……..
來到新的公司遇到了超哥,很幸運,很幸運,多的話不說了哈哈。
超哥給了我幾點建議:
1. 記 PHP 函式
2. 學習優秀程式碼的思想
3. 不停寫程式碼,十萬行程式碼什麼時候達到什麼時候就 NB 了
4. 多嘗試脫離任何固定思維去寫東西、按自己的想法去做、然後你會遇到問題,總結起來
5. 反思自己寫程式碼的套路與流程,敢於懷疑
一步一個腳印,穩紮穩打,重新出發!從基本的函式記憶開始,堅持 ing!
每天花 5 分鐘左右的時間刷一遍,哈哈。
這篇文章已經更新不動了,請戳《每日五個 PHP 函式 (2)》
2019/02/19
- ** 今日小練習 **
// 說明:確保指定 user_id 存在於 users 陣列中
$users = array(2, 3);
$user_id = 1;
** in_array($user_id, $users) || array_unshift($users, $user_id); **
print_r($users);
// 輸出:
Array
(
[0] => 1
[1] => 2
[2] => 3
)
—————————————** 回顧 01-15 (點我) **—————————————
2019/02/18
- ** 今日小練習 **
// 說明:將陣列以指定字元拼接為字串、根據指定字元將字串打散為陣列、根據長度將字串拆分為陣列
$arr = array('Hello','World!','I','love','Shenzhen!');
$str = "Hello World! I love Shenzhen!";
** echo implode(“ “, $arr); **
** print_r (explode(“ “, $str)); **
** print_r (str_split($str, 4)); **
// 輸出:
Hello World! I love Shenzhen!
// 輸出:
(
[0] => Hello
[1] => World!
[2] => I
[3] => love
[4] => Shenzhen!
)
// 輸出:
(
[0] => Hell
[1] => o Wo
[2] => rld!
[3] => I l
[4] => ove
[5] => Shen
[6] => zhen
[7] => !
)
—————————————** 回顧 01-14 (點我) **—————————————
2019/02/17
繼續回顧之前的噢
- ** 今日小練習 **
// 說明:獲取一堆使用者中指定 uid 的鍵值
** $key = array_search(40489, array_column$users, ‘uid’)); **
—————————————** 回顧 01-13 (點我) **—————————————
2019/02/16
繼續回顧之前的噢,哈哈
- ** 今日小練習 **
// 說明:時間戳相互轉換
** echo date(“Y-m-d H:i”, time()); **
** echo strtotime(“2019-02-16 20:33”); **
// 輸出:2019-02-16 20:33
// 輸出:1550320380
—————————————** 回顧 01-12 (點我) **—————————————
2019/02/15
繼續回顧之前的噢,哈哈
- ** 今日小練習 **
// 說明:獲取 abc.jpeg 字尾名
$fileName = 'abc.jpeg';
** echo substr($fileName, strrpos$fileName, “.”)); **
// 輸出:.jpeg
—————————————** 回顧 01-11 (點我) **—————————————
2019/02/14
也刷了這麼多天的函式了,感覺之前的都忘記了哈哈,現在就回顧一下之前的吧。
- ** 今日小練習 **
// 說明:將 [1, 2, 3] 轉變為:[1=>"a", 2=>"a", 3=>"a"]
$arr = array(1, 2, 3);
** var_dump(array_combine($arr, array_fill(0, count($arr), ‘a’))); **
// 輸出:
array(3) {
[1]=>
string(1) "a"
[2]=>
string(1) "a"
[3]=>
string(1) "a"
}
—————————————** 回顧 01-10 (點我) **—————————————
2019/02/13
檔案系統 No.1
- **
chdir
— 改變目錄 **
// 說明:chdir ( string $directory ) : bool
// 將 PHP 的當前目錄改為 directory。
- **
chroot
— 改變根目錄**
// 說明:chroot ( string $directory ) : bool
// 將當前程式的根目錄改變為 directory ,本函式僅在系統支援且執行於 CLI,CGI 或嵌入 SAPI 版本時才能正確工作。此外本函式還需要 root 許可權。
- **
closedir
— 關閉目錄控制程式碼 **
// 說明:closedir ([ resource $dir_handle ] ) : void
// 關閉由 dir_handle 指定的目錄流。流必須之前被 opendir() 所開啟。
- **
dir
—返回一個 Directory 類例項 **
// 說明:dir ( string $directory [, resource $context ] ) : Directory
// 以物件導向的方式訪問目錄。開啟 directory 引數指定的目錄。
- **
getcwd
— 取得當前工作目錄**
// 說明:getcwd ( void ) : string
// 取得當前工作目錄
2019/02/12
日期函式 No.3
- **
localtime
— 取得本地時間 **
// 說明:localtime ([ int $timestamp = time() [, bool $is_associative = false ]] ) : array
$localtime = localtime();
$localtime_assoc = localtime(time(), true);
print_r($localtime);
print_r($localtime_assoc);
// 輸出:
Array
(
[0] => 53
[1] => 46
[2] => 22
[3] => 12
[4] => 1
[5] => 119 // 1900 + 119 = 2019
[6] => 2
[7] => 42
[8] => 0
)
Array
(
[tm_sec] => 53
[tm_min] => 46
[tm_hour] => 22
[tm_mday] => 12
[tm_mon] => 1
[tm_year] => 119
[tm_wday] => 2
[tm_yday] => 42
[tm_isdst] => 0
)
- **
time
— 返回當前的 Unix 時間戳**
// 說明:time ( void ) : int
$nextWeek = time() + (7 * 24 * 60 * 60);
// 7 days; 24 hours; 60 mins; 60 secs
echo 'Now: '. date('Y-m-d') ."\n"; // 輸出:Now: 2019-02-12
echo 'Next Week: '. date('Y-m-d', $nextWeek) ."\n"; // 輸出:Next Week: 2019-02-19
echo 'Next Week: '. date('Y-m-d', strtotime('+1 week')) ."\n"; // 輸出:Next Week: 2019-02-19
- **
gmdate
— 格式化一個 GMT/UTC 日期/時間 **
// 說明:gmdate ( string $format [, int $timestamp ] ) : string
echo date("M d Y H:i:s", mktime (0,0,0,02,12,2019)); // 輸出:Feb 12 2019 00:00:00
echo gmdate("M d Y H:i:s", mktime (0,0,0,02,12,2019)); // 輸出:Feb 12 2019 00:00:00
- **
gettimeofday
—取得當前時間 **
// 說明:gettimeofday ([ bool $return_float = false ] ) : mixed
print_r(gettimeofday());
echo gettimeofday(true);
// 輸出:
Array
(
[sec] => 1549983633
[usec] => 757476
[minuteswest] => 0
[dsttime] => 0
)
1549983633.7576
- **
gmmktime
— 取得 GMT 日期的 UNIX 時間戳**
// 說明:gmmktime ([ int $hour [, int $minute [, int $second [, int $month [, int $day [, int $year [, int $is_dst ]]]]]]] ) : int
echo gmmktime(0, 0, 0, 2, 12, 2019); // 輸出:1549929600
2019/02/11
日期函式 No.2
- **
date
— 格式化一個本地時間/日期 **
// 說明:date ( string $format [, int $timestamp ] ) : string
// 星期幾
echo date("l") . "<br>"; // 輸出:Monday
echo date("Y-m-d H:i"); // 輸出:2019-02-11 19:48
詳細引數說明請戳 -> date 官方文件
- **
strtotime
— 將任何字串的日期時間描述解析為 Unix 時間戳**
// 說明:strtotime ( string $time [, int $now = time() ] ) : int
echo strtotime("now"), "\n"; // 輸出:1549885944
echo strtotime("10 September 2000"), "\n"; // 輸出:968515200
echo strtotime("+1 day"), "\n"; // 輸出:1549972344
echo strtotime("+1 week"), "\n"; // 輸出:1550490744
echo strtotime("+1 week 2 days 4 hours 2 seconds"), "\n"; // 輸出:1550677946
echo strtotime("next Thursday"), "\n"; // 輸出:1550073600
echo strtotime("last Monday"), "\n"; // 輸出:1549209600
echo strtotime("2019-02-11"), "\n"; // 輸出:1549814400
- **
getdate
—取得日期/時間資訊 **
// 說明:getdate ([ int $timestamp = time() ] ) : array
$today = getdate();
print_r($today);
// 輸出:
Array
(
[seconds] => 9
[minutes] => 58
[hours] => 19
[mday] => 11
[wday] => 1
[mon] => 2
[year] => 2019
[yday] => 41
[weekday] => Monday
[month] => February
[0] => 1549886289
)
- **
microtime
— 返回當前 Unix 時間戳和微秒數 **
// 說明:microtime ([ bool $get_as_float ] ) : mixed
// 如果呼叫時不帶可選引數,本函式以 "msec sec" 的格式返回一個字串,其中 sec 是自 Unix 紀元(0:00:00 January 1, 1970 GMT)起到現在的秒數,msec 是微秒部分。字串的兩部分都是以秒為單位返回的
echo(microtime()); // 輸出:0.85606500 1549886401
- **
mktime
— 取得一個日期的 Unix 時間戳**
// 說明:mktime ([ int $hour = date("H") [, int $minute = date("i") [, int $second = date("s") [, int $month = date("n") [, int $day = date("j") [, int $year = date("Y") [, int $is_dst = -1 ]]]]]]] ) : int
// 設定要使用的預設時區。 自PHP 5.1起可用
date_default_timezone_set('UTC');
// 輸出: July 1, 2000 is on a Saturday
echo "July 1, 2000 is on a " . date("l", mktime(0, 0, 0, 7, 1, 2000));
// 輸出: 2006-04-05T01:02:03+00:00
echo date('c', mktime(1, 2, 3, 4, 5, 2006));
2019/02/10
日期函式 No.1
- **
date_create / DateTime::__construct
— 函式返回一個新的 DateTime 物件 **
// 面對物件風格:public DateTime::__construct ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] )
// 過程化風格:date_create ([ string $time = "now" [, DateTimeZone $timezone = NULL ]] ) : DateTime
$date=date_create("2019-02-10");
echo date_format($date,"Y/m/d"); // 輸出:2019/02/10
- **
checkdate
— 檢查一些日期是否是有效的格利高裡日期**
// 說明:checkdate ( int $month , int $day , int $year ) : bool
// 檢查由引數構成的日期的合法性。如果每個引數都正確定義了則會被認為是有效的。
var_dump(checkdate(12, 31, 2000)); // 輸出:bool(true)
var_dump(checkdate(2, 29, 2001)); // 輸出:bool(false)
- **
date_format
—函式返回一個根據指定格式進行格式化的日期 **
// 面對物件風格:public DateTime::format ( string $format ) : string、public DateTimeImmutable::format ( string $format ) : string、public DateTimeInterface::format ( string $format ) : string
// 過程化風格:date_format ( DateTimeInterface $object , string $format ) : string
$date = new DateTime('2019-02-10');
echo $date->format('Y-m-d H:i:s'); // 輸出:2019-02-10 00:00:00
$date = date_create('2019-02-10');
echo date_format($date, 'Y-m-d H:i:s'); // 輸出:2019-02-10 00:00:00
- **
date_add / DateTime::add
— 給一個 DateTime 物件增加一定量的天,月,年,小時,分鐘 以及秒 **
// 面對物件風格:public DateTime::add ( DateInterval $interval ) : DateTime
// 過程化風格:date_add ( DateTime $object , DateInterval $interval ) : DateTime
// 新增 40 天到 2013 年 3 月 15 日:
$date=date_create("2019-02-10");
date_add($date,date_interval_create_from_date_string("40 days"));
echo date_format($date,"Y-m-d"); // 輸出:2019-03-22
- **
date_interval_create_from_date_string / DateInterval::createFromDateString()
— 從字串的相關部分建立一個 DateInterval**
// 說明:public static DateInterval::createFromDateString ( string $time ) : DateInterval
2019/02/08
日曆函式 No.2
- **
JDToGregorian
— 轉變一個Julian Day計數為Gregorian曆法日期**
// 說明:jdtogregorian ( int $julianday ) : string
- **
gregoriantojd
— 轉變一個 Gregorian 曆法日期到 Julian Day 計數**
// 說明:gregoriantojd ( int $month , int $day , int $year ) : int
$jd = GregorianToJD(10, 11, 1970);
echo "$jd\n"; // 輸出:2440871
$gregorian = JDToGregorian($jd);
echo "$gregorian\n"; // 輸出:10/11/1970
- **
JDMonthName
— 返回月份的名稱 **
// 說明:jdmonthname ( int $julianday , int $mode ) : string
$jd=gregoriantojd(1,13,1998);
echo jdmonthname($jd,0);
- **
jdtounix
—轉變 Julian Day 計數為一個 Unix 時間戳**
// 說明:jdtounix ( int $jday ) : int
// 這個函式根據給定的 julian 天數返回一個Unix時間戳,或如果引數 jday 不在 Unix 時間( Gregorian 曆法的 1970 年至 2037 年,或 2440588 <= jday <= 2465342)範圍內返回 FALSE 。返回的時間是本地時間(不是 GMT )。
- **
unixtojd
— 轉變 Unix 時間戳為 Julian Day 計數**
// 說明:unixtojd ([ int $timestamp = time() ] ) : int
// 根據指定的Unix時間戳 timestamp,返回 Julian 天數。如果沒有指定時間戳則返回當前日期的天數
2019/02/07
日曆函式 No.1
- **
cal_info
— 返回選定曆法的資訊**
// 說明:cal_info ([ int $calendar = -1 ] ) : array
// 0 or CAL_GREGORIAN - 陽曆
// 1 or CAL_JULIAN - 儒略日(是在儒略週期內以連續的日數計算時間的計時法,主要是天文學家在使用。)
// 2 or CAL_JEWISH - 猶太曆;猶歷(猶太人所用的一種陰陽曆記日系統,從公元前3761年算起)
// 3 or CAL_FRENCH - 法國共和曆(法蘭西第一共和國採用的革命曆法,於1793年11月24日起採用,1806年元旦廢止)
$info = cal_info(0);
print_r($info);
// 輸出:
Array
(
[months] => Array
(
[1] => January
[2] => February
[3] => March
[4] => April
[5] => May
[6] => June
[7] => July
[8] => August
[9] => September
[10] => October
[11] => November
[12] => December
)
[abbrevmonths] => Array
(
[1] => Jan
[2] => Feb
[3] => Mar
[4] => Apr
[5] => May
[6] => Jun
[7] => Jul
[8] => Aug
[9] => Sep
[10] => Oct
[11] => Nov
[12] => Dec
)
[maxdaysinmonth] => 31
[calname] => Gregorian
[calsymbol] => CAL_GREGORIAN
)
- **
cal_days_in_month
— 返回某個曆法中某年中某月的天數**
// 說明:cal_days_in_month ( int $calendar , int $month , int $year ) : int
$num = cal_days_in_month(CAL_GREGORIAN, 8, 2003); // 31
echo "There was $num days in August 2003";
- **
easter_date
— 得到指定年份的復活節午夜時的Unix時間戳 **
// 說明:easter_date ([ int $year ] ) : int
echo date("M-d-Y", easter_date(1999)); // Apr-04-1999
echo date("M-d-Y", easter_date(2000)); // Apr-23-2000
echo date("M-d-Y", easter_date(2001)); // Apr-15-2001
- **
easter_days
— 得到指定年份的3月21日到復活節之間的天數**
// 說明:easter_days ([ int $year [, int $method = CAL_EASTER_DEFAULT ]] ) : int
// 返回指定年份的3月21日到復活節之間的天數,如果沒有指定年份,預設是當年。
echo easter_days(1999); // 14, i.e. April 4
echo easter_days(1492); // 32, i.e. April 22
echo easter_days(1913); // 2, i.e. March 23
- **
JDDayOfWeek
— 返回星期的日期**
// 說明:jddayofweek ( int $julianday [, int $mode = CAL_DOW_DAYNO ] ) : mixed
// mode:
// 0 -> 返回數字形式(0=Sunday, 1=Monday, etc)
// 1 -> 返回字串形式 (English-Gregorian)
// 2 -> 返回縮寫形式的字串 (English-Gregorian)
// 返回 1998 年 1 月 13 日這天是周幾:
$jd=gregoriantojd(1,13,1998); // gregoriantojd:轉變一個 Gregorian 曆法日期到 Julian Day 計數
echo jddayofweek($jd,1); // 輸出:Tuesday
2019/02/06
過濾器函式 No.1
- **
filter_has_var
— 檢測是否存在指定型別的變數**
// 說明:filter_has_var ( int $type , string $variable_name ) : bool
if ( !filter_has_var(INPUT_GET, 'email') ) {
echo "Email Not Found";
}else{
echo "Email Found";
}
localhost/test.php?email=1 //Email Found
localhost/test.php?email //Email Found
localhost/test.php //Email Not Found
- **
filter_list
— 返回所支援的過濾器列表**
// 說明:filter_list ( void ) : array
print_r(filter_list());
// 輸出類似:
Array
(
[0] => int
[1] => boolean
[2] => float
[3] => validate_regexp
[4] => validate_url
[5] => validate_email
[6] => validate_ip
[7] => string
[8] => stripped
[9] => encoded
[10] => special_chars
[11] => unsafe_raw
[12] => email
[13] => url
[14] => number_int
[15] => number_float
[16] => magic_quotes
[17] => callback
)
- **
filter_id
— 返回與某個特定名稱的過濾器相關聯的 id **
// 說明:filter_id ( string $filtername ) : int
$filters = filter_list();
foreach($filters as $filter_name) {
echo $filter_name .": ".filter_id($filter_name) ."<br>";
}
// 輸出類似:
boolean: 258
float: 259
validate_regexp: 272
validate_url: 273
validate_email: 274
validate_ip: 275
string: 513
stripped: 513
encoded: 514
special_chars: 515
unsafe_raw: 516
email: 517
url: 518
number_int: 519
number_float: 520
magic_quotes: 521
callback: 1024
- **
filter_input
— 透過名稱獲取特定的外部變數,並且可以透過過濾器處理它**
// 說明:filter_input ( int $type , string $variable_name [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed
// type: INPUT_GET, INPUT_POST, INPUT_COOKIE, INPUT_SERVER或 INPUT_ENV之一。
$search_html = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_SPECIAL_CHARS);
$search_url = filter_input(INPUT_GET, 'search', FILTER_SANITIZE_ENCODED);
echo "You have searched for $search_html.\n"; // 輸出:You have searched for Me & son.
echo "<a href='?search=$search_url'>Search again.</a>"; // 輸出:<a href='?search=Me%20%26%20son'>Search again.</a>
- **
filter_var
— 使用特定的過濾器過濾一個變數**
// 說明:filter_var ( mixed $variable [, int $filter = FILTER_DEFAULT [, mixed $options ]] ) : mixed
var_dump(filter_var('bob@example.com', FILTER_VALIDATE_EMAIL)); // 輸出:string(15) "bob@example.com"
var_dump(filter_var('http://example.com', FILTER_VALIDATE_URL, FILTER_FLAG_PATH_REQUIRED)); // 輸出:bool(false)
2019/02/05
可變處理函式 No.4
- **
is_string
— 檢測變數是否是字串**
// 說明:is_string ( mixed $var ) : bool
- **
isset
— 檢測變數是否已設定並且非 NULL**
// 說明:isset ( mixed $var [, mixed $... ] ) : bool
$var = '';
// 結果為 TRUE,所以後邊的文字將被列印出來。
if (isset($var)) {
echo "This var is set so I will print.";
}
$a = "test";
$b = "anothertest";
var_dump(isset($a)); // TRUE
var_dump(isset($a, $b)); // TRUE
unset ($a);
var_dump(isset($a)); // FALSE
var_dump(isset($a, $b)); // FALSE
$foo = NULL;
var_dump(isset($foo)); // FALSE
- **
serialize
— 產生一個可儲存的值的表示**
// 說明:serialize ( mixed $value ) : string
// serialize() 返回字串,此字串包含了表示 value 的位元組流,可以儲存於任何地方
- **
unserialize
— 從已儲存的表示中建立 PHP 的值**
// 說明:unserialize ( string $str ) : mixed
// unserialize() 對單一的已序列化的變數進行操作,將其轉換回 PHP 的值。
- **
unset
— 釋放給定的變數**
// 說明:unset ( mixed $var [, mixed $... ] ) : void
// unset() 銷燬指定的變數。
2019/02/04
可變處理函式 No.3
- **
is_float / is_double
— 檢測變數是否是浮點型**
// 說明:is_float ( mixed $var ) : bool
- **
is_int / is_integer / is_long
— 檢測變數是否是整數**
// 說明:is_int ( mixed $var ) : bool
- **
is_null
— 檢測變數是否為 NULL**
// 說明:is_null ( mixed $var ) : bool
- **
is_numeric
— 檢測變數是否為數字或數字字串**
// 說明:is_numeric ( mixed $var ) : bool
- **
is_object
— 檢測變數是否是一個物件**
// 說明:is_object ( mixed $var ) : bool
哈哈,今天新年啦,祝福大家新年快樂,身體棒棒噠!
2019/02/03
可變處理函式 No.2
- **
get_resource_type
— 返回資源(resource)型別**
// 說明:get_resource_type ( resource $handle ) : string
$c = mysql_connect();
echo get_resource_type($c)."\n"; // 輸出:mysql link
$fp = fopen("foo","w");
echo get_resource_type($fp)."\n"; // 輸出:file
$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc)."\n"; // 輸出:domxml document
- **
is_array
— 檢測變數是否是陣列**
// 說明:is_array ( mixed $var ) : bool
// 如果 var 是 array,則返回 TRUE,否則返回 FALSE。
- **
is_bool
— 檢測變數是否是布林型**
// 說明:is_bool ( mixed $var ) : bool
// 如果 var 是 boolean 則返回 TRUE。
- **
is_callable
— 檢測引數是否為合法的可呼叫結構**
// 說明:is_callable ( callable $name [, bool $syntax_only = false [, string &$callable_name ]] ) : bool
// name:要檢查的回撥函式。
// syntax_only:如果設定為 TRUE,這個函式僅僅驗證 name 可能是函式或方法。 它僅僅拒絕非字元,或者未包含能用於回撥函式的有效結構。有效的應該包含兩個元素,第一個是一個物件或者字元,第二個元素是個字元。
// callable_name 接受“可呼叫的名稱”。下面的例子是 “someClass::someMethod” 。 注意,儘管 someClass::SomeMethod() 的含義是可呼叫的靜態方法,但例子的情況並不是這樣的。
function someFunction()
{
}
$functionVariable = 'someFunction';
var_dump(is_callable($functionVariable, false, $callable_name)); // bool(true)
echo $callable_name, "\n"; // someFunction
//
// Array containing a method
//
class someClass {
function someMethod()
{
}
}
$anObject = new someClass();
$methodVariable = array($anObject, 'someMethod');
var_dump(is_callable($methodVariable, true, $callable_name)); // bool(true)
echo $callable_name, "\n"; // someClass::someMethod
- **
is_countable
— 驗證變數的內容是否為可數值**
// 說明:is_countable ( mixed $var ) : bool
var_dump(is_countable([1, 2, 3])); // bool(true)
var_dump(is_countable(new ArrayIterator(['foo', 'bar', 'baz']))); // bool(true)
var_dump(is_countable(new ArrayIterator())); // bool(true)
var_dump(is_countable(new stdClass())); // bool(false)
2019/02/02
可變處理函式 No.1
- **
boolval
— 獲取變數的布林值**
// 說明:boolval ( mixed $var ) : boolean
echo '0: '.(boolval(0) ? 'true' : 'false')."\n"; // 輸出:0: false
echo '42: '.(boolval(42) ? 'true' : 'false')."\n"; // 輸出:42: true
echo '0.0: '.(boolval(0.0) ? 'true' : 'false')."\n"; // 輸出:0.0: false
echo '4.2: '.(boolval(4.2) ? 'true' : 'false')."\n"; // 輸出:4.2: true
echo '"": '.(boolval("") ? 'true' : 'false')."\n"; // 輸出:"": false
echo '"string": '.(boolval("string") ? 'true' : 'false')."\n"; // 輸出:"string": true
echo '"0": '.(boolval("0") ? 'true' : 'false')."\n"; // 輸出:"0": false
echo '"1": '.(boolval("1") ? 'true' : 'false')."\n"; // 輸出:"1": true
echo '[1, 2]: '.(boolval([1, 2]) ? 'true' : 'false')."\n"; // 輸出:[1, 2]: true
echo '[]: '.(boolval([]) ? 'true' : 'false')."\n"; // 輸出:[]: false
echo 'stdClass: '.(boolval(new stdClass) ? 'true' : 'false')."\n"; // 輸出:stdClass: true
- **
floatval
— 獲取變數的浮點值**
// 說明:floatval ( mixed $var ) : float
$var = '122.34343The';
$float_value_of_var = floatval ($var);
print $float_value_of_var; // 輸出: 122.34343
- **
intval
— 獲取變數的整數值**
// 說明:intval ( mixed $var [, int $base = 10 ] ) : int
echo intval(42); // 42
echo intval(4.2); // 4
echo intval('42'); // 42
echo intval('+42'); // 42
echo intval('-42'); // -42
echo intval(042); // 34
echo intval('042'); // 42
echo intval(1e10); // 1410065408
echo intval('1e10'); // 1
echo intval(0x1A); // 26
echo intval(42000000); // 42000000
echo intval(420000000000000000000); // 0
echo intval('420000000000000000000'); // 2147483647
echo intval(42, 8); // 42
echo intval('42', 8); // 34
echo intval(array()); // 0
echo intval(array('foo', 'bar')); // 1
- **
strval
— 獲取變數的字串值**
// 說明:strval ( mixed $var ) : string
$foo = strval(123);
var_dump($foo); // string(3) "123"
- **
settype
— 設定變數的型別**
// 說明:settype ( mixed &$var , string $type ) : bool
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo 現在是 5 (integer)
settype($bar, "string"); // $bar 現在是 "1" (string)
2019/02/01
Ctype 函式 No.2
- **
ctype_lower
— 做小寫字元檢測**
// 說明:ctype_lower ( string $text ) : bool
// 檢查提供的 string 和 text 裡面的字元是不是都是小寫字母。
$strings = array('aac123', 'qiutoas', 'QASsdks');
foreach ($strings as $testcase) {
if (ctype_lower($testcase)) {
echo "The string $testcase consists of all lowercase letters.\n";
} else {
echo "The string $testcase does not consist of all lowercase letters.\n";
}
}
// 輸出:
// The string aac123 does not consist of all lowercase letters.
// The string qiutoas consists of all lowercase letters.
// The string QASsdks does not consist of all lowercase letters.
- **
ctype_print
— 做可列印字元檢測**
// 說明:ctype_print ( string $text ) : bool
// 檢查提供的 string 和 text 裡面的字元是不是都是可以列印出來。
$strings = array('string1' => "asdf\n\r\t", 'string2' => 'arf12', 'string3' => 'LKA#@%.54');
foreach ($strings as $name => $testcase) {
if (ctype_print($testcase)) {
echo "The string '$name' consists of all printable characters.\n";
} else {
echo "The string '$name' does not consist of all printable characters.\n";
}
}
// 輸出:
// The string 'string1' does not consist of all printable characters.
// The string 'string2' consists of all printable characters.
// The string 'string3' consists of all printable characters.
- **
ctype_punct
— 檢測可列印的字元是不是不包含空白、數字和字母**
// 說明:ctype_punct ( string $text ) : bool
// 檢查提供的 string 和 text 裡面的字元是不是都是標點符號。
$strings = array('ABasdk!@!$#', '!@ # $', '*&$()');
foreach ($strings as $testcase) {
if (ctype_punct($testcase)) {
echo "The string $testcase consists of all punctuation.\n";
} else {
echo "The string $testcase does not consist of all punctuation.\n";
}
}
// 輸出:
// The string ABasdk!@!$# does not consist of all punctuation.
// The string !@ # $ does not consist of all punctuation.
// The string *&$() consists of all punctuation.
- **
ctype_space
— 做空白字元檢測**
// 說明:ctype_space ( string $text ) : bool
// 檢查提供的 string 和 text 裡面的字元是否包含空白。
$strings = array('string1' => "\n\r\t", 'string2' => "\narf12", 'string3' => '\n\r\t');
foreach ($strings as $name => $testcase) {
if (ctype_space($testcase)) {
echo "The string '$name' consists of all whitespace characters.\n";
} else {
echo "The string '$name' does not consist of all whitespace characters.\n";
}
}
// 輸出:
// The string 'string1' consists of all whitespace characters.
// The string 'string2' does not consist of all whitespace characters.
// The string 'string3' does not consist of all whitespace characters.
- **
ctype_upper
— 做大寫字母檢測**
// 說明:ctype_upper ( string $text ) : bool
// 檢查 string 和 text 裡面的字元是不是都是大寫字母。
$strings = array('AKLWC139', 'LMNSDO', 'akwSKWsm');
foreach ($strings as $testcase) {
if (ctype_upper($testcase)) {
echo "The string $testcase consists of all uppercase letters.\n";
} else {
echo "The string $testcase does not consist of all uppercase letters.\n";
}
}
// 輸出:
// The string AKLWC139 does not consist of all uppercase letters.
// The string LMNSDO consists of all uppercase letters.
// The string akwSKWsm does not consist of all uppercase letters.
2019/01/31
Ctype 函式 No.1
- **
ctype_alnum
— 做字母和數字字元檢測**
// 說明:ctype_alnum ( string $text ) : bool
// 如果 text 中所有的字元全部是字母和(或者)數字,返回 TRUE 否則返回 FALSE
$strings = array('AbCd1zyZ9', 'foo!#$bar');
foreach ($strings as $testcase) {
if (ctype_alnum($testcase)) {
echo "The string $testcase consists of all letters or digits.\n";
} else {
echo "The string $testcase does not consist of all letters or digits.\n";
}
}
// 輸出:
// The string AbCd1zyZ9 consists of all letters or digits.
// The string foo!#$bar does not consist of all letters or digits.
- **
ctype_alpha
— 做純字元檢測**
// 說明:ctype_alpha ( string $text ) : bool
// 如果在當前語言環境中 text 裡的每個字元都是一個字母,那麼就返回 TRUE,反之則返回 FALSE。
$strings = array('KjgWZC', 'arf12');
foreach ($strings as $testcase) {
if (ctype_alpha($testcase)) {
echo "The string $testcase consists of all letters.\n";
} else {
echo "The string $testcase does not consist of all letters.\n";
}
}
// 輸出:
// The string KjgWZC consists of all letters.
// The string arf12 does not consist of all letters.
- **
ctype_cntrl
— 做控制字元檢測**
// 說明:ctype_cntrl ( string $text ) : bool
// 如果在當前的語言環境下 text 裡面的每個字元都是控制字元,就返回 TRUE ;反之就返回 FALSE 。
// 控制字元就是例如:換行、縮排、空格。
$strings = array('string1' => "\n\r\t", 'string2' => 'arf12');
foreach ($strings as $name => $testcase) {
if (ctype_cntrl($testcase)) {
echo "The string '$name' consists of all control characters.\n";
} else {
echo "The string '$name' does not consist of all control characters.\n";
}
}
// 輸出:
// The string 'string1' consists of all control characters.
// The string 'string2' does not consist of all control characters.
- **
ctype_digit
— 做純數字檢測**
// 說明:ctype_digit ( string $text ) : bool
$strings = array('1820.20', '10002', 'wsl!12');
foreach ($strings as $testcase) {
if (ctype_digit($testcase)) {
echo "The string $testcase consists of all digits.\n";
} else {
echo "The string $testcase does not consist of all digits.\n";
}
}
// 輸出:
// The string 1820.20 does not consist of all digits.
// The string 10002 consists of all digits.
// The string wsl!12 does not consist of all digits.
- **
ctype_graph
— 做可列印字串檢測,空格除外**
// 說明:ctype_graph ( string $text ) : bool
// 如果 text 裡面的每個字元都是輸出可見的(沒有空白),就返回 TRUE ;反之就返回 FALSE 。
$strings = array('string1' => "asdf\n\r\t", 'string2' => 'arf12', 'string3' => 'LKA#@%.54');
foreach ($strings as $name => $testcase) {
if (ctype_graph($testcase)) {
echo "The string '$name' consists of all (visibly) printable characters.\n";
} else {
echo "The string '$name' does not consist of all (visibly) printable characters.\n";
}
}
// 輸出:
// The string 'string1' does not consist of all (visibly) printable characters.
// The string 'string2' consists of all (visibly) printable characters.
// The string 'string3' consists of all (visibly) printable characters.
2019/01/30
類/物件 函式 No.3
- **
is_a
— 如果物件屬於該類或該類是此物件的父類則返回 TRUE**
// 說明:is_a ( object $object , string $class_name [, bool $allow_string = FALSE ] ) : bool
// 定義一個類
class WidgetFactory
{
var $oink = 'moo';
}
// 建立一個新物件
$WF = new WidgetFactory();
if (is_a($WF, 'WidgetFactory')) {
echo "yes, \$WF is still a WidgetFactory\n";
}
- **
is_subclass_of
— 如果此物件是該類的子類,則返回 TRUE**
// 說明:is_subclass_of ( object $object , string $class_name ) : bool
// define a class
class WidgetFactory
{
var $oink = 'moo';
}
// define a child class
class WidgetFactory_Child extends WidgetFactory
{
var $oink = 'oink';
}
// create a new object
$WF = new WidgetFactory();
$WFC = new WidgetFactory_Child();
if (is_subclass_of($WFC, 'WidgetFactory')) {
echo "yes, \$WFC is a subclass of WidgetFactory\n";
} else {
echo "no, \$WFC is not a subclass of WidgetFactory\n";
}
if (is_subclass_of($WF, 'WidgetFactory')) {
echo "yes, \$WF is a subclass of WidgetFactory\n";
} else {
echo "no, \$WF is not a subclass of WidgetFactory\n";
}
// usable only since PHP 5.0.3
if (is_subclass_of('WidgetFactory_Child', 'WidgetFactory')) {
echo "yes, WidgetFactory_Child is a subclass of WidgetFactory\n";
} else {
echo "no, WidgetFactory_Child is not a subclass of WidgetFactory\n";
}
// 輸出:
// yes, $WFC is a subclass of WidgetFactory
// no, $WF is not a subclass of WidgetFactory
// yes, WidgetFactory_Child is a subclass of WidgetFactory
- **
method_exists
— 檢查類的方法是否存在**
// 說明:method_exists ( mixed $object , string $method_name ) : bool
$directory = new Directory('.');
var_dump(method_exists($directory,'read')); // 輸出:bool(true)
- **
property_exists
— 檢查物件或類是否具有該屬性**
// 說明:property_exists ( mixed $class , string $property ) : bool
class myClass {
public $mine;
private $xpto;
static protected $test;
static function test() {
var_dump(property_exists('myClass', 'xpto')); //true
}
}
var_dump(property_exists('myClass', 'mine')); //true
var_dump(property_exists(new myClass, 'mine')); //true
var_dump(property_exists('myClass', 'xpto')); //true, as of PHP 5.3.0
var_dump(property_exists('myClass', 'bar')); //false
var_dump(property_exists('myClass', 'test')); //true, as of PHP 5.3.0
myClass::test();
- **
trait_exists
— 檢查指定的 trait 是否存在**
// 說明:trait_exists ( string $traitname [, bool $autoload ] ) : bool
trait World {
private static $instance;
protected $tmp;
public static function World()
{
self::$instance = new static();
self::$instance->tmp = get_called_class().' '.__TRAIT__;
return self::$instance;
}
}
if ( trait_exists( 'World' ) ) {
class Hello {
use World;
public function text( $str )
{
return $this->tmp.$str;
}
}
}
echo Hello::World()->text('!!!'); // Hello World!!!
2019/01/29
類/物件 函式 No.2
- **
get_class_methods
— 返回由類的方法名組成的陣列**
// 說明:get_class_methods ( mixed $class_name ) : array
class myclass {
// constructor
function myclass()
{
return(true);
}
// method 1
function myfunc1()
{
return(true);
}
// method 2
function myfunc2()
{
return(true);
}
}
$class_methods = get_class_methods('myclass');
// or
$class_methods = get_class_methods(new myclass());
foreach ($class_methods as $method_name) {
echo "$method_name\n";
}
// 輸出:myclass、myfunc1、myfunc2
- **
get_class
— 返回物件的類名**
// 說明:get_class ([ object $object = NULL ] ) : string
class foo {
function name()
{
echo "My name is " , get_class($this) , "\n";
}
}
// create an object
$bar = new foo();
// external call
echo "Its name is " , get_class($bar) , "\n"; // 輸出:Its name is foo
// internal call
$bar->name(); // 輸出:My name is foo
- **
get_class_vars
— 返回由類的預設屬性組成的陣列**
// 說明:get_class_vars ( string $class_name ) : array
class myclass {
var $var1; // this has no default value...
var $var2 = "xyz";
var $var3 = 100;
private $var4;
// constructor
function __construct() {
// change some properties
$this->var1 = "foo";
$this->var2 = "bar";
return true;
}
}
$my_class = new myclass();
$class_vars = get_class_vars(get_class($my_class));
foreach ($class_vars as $name => $value) {
echo "$name : $value\n";
}
// 輸出:var1 : 、var2 : xyz、var3 : 100
- **
get_parent_class
— 返回物件或類的父類名**
// 說明:get_parent_class ([ mixed $obj ] ) : string
class dad {
function dad()
{
// implements some logic
}
}
class child extends dad {
function child()
{
echo "I'm " , get_parent_class($this) , "'s son\n";
}
}
class child2 extends dad {
function child2()
{
echo "I'm " , get_parent_class('child2') , "'s son too\n";
}
}
$foo = new child(); // 輸出:I'm dad's son
$bar = new child2(); // 輸出:I'm dad's son too
- **
interface_exists
— 檢查介面是否已被定義**
// 說明:interface_exists ( string $interface_name [, bool $autoload = true ] ) : bool
// 在嘗試使用前先檢查介面是否存在
if (interface_exists('MyInterface')) {
class MyClass implements MyInterface
{
// Methods
}
}
2019/01/28
類/物件 函式 No.1
- **
__autoload
— 嘗試載入未定義的類**
// 說明:__autoload ( string $class ) : void
// index.php
function __autoload($class) {
$file = $class . '.php';
require_once $file;
}
$test = new test();
// test.php
class test {
public function __construct() {
echo "this is test";
}
}
// 當在 index.php 中初始化 test 時,因為找不到對應類,就會呼叫 __autoload() 引入對應檔案。
- **
spl_autoload_register
— 註冊給定的函式作為 __autoload 的實現**
// 說明:spl_autoload_register ([ callable $autoload_function [, bool $throw = true [, bool $prepend = false ]]] ) : bool
// 因為 __autoload() 在一個程式中只能定義它一次。當我們在進行專案合併的時候,如果出現多個 autoload() 需要將其合併為一個函式。那麼,出現了 spl_autoload_register()。
// index.php
function autoload_test($class) {
$file = $class . '.php';
require_once $file;
}
spl_autoload_register("autoload_test");
$test = new test();
// test.php
class test {
public function __construct() {
echo "this is test";
}
}
// 使用此函式可以生成一個__autoload()佇列,可以註冊多個函式。
// index.php
function autoload_test($class) {
$file = $class . '.php';
require_once $file;
}
function autoload_vos($class) {
$file = $class . '.php';
require_once $file;
}
spl_autoload_register("autoload_test");
spl_autoload_register("autoload_vos");
$test = new test();
- **
class_alias
— 為一個類建立別名**
// 說明:class_alias ( string $original , string $alias [, bool $autoload = TRUE ] ) : bool
class foo { }
class_alias('foo', 'bar');
$a = new foo;
$b = new bar;
// the objects are the same
var_dump($a == $b, $a === $b); // 輸出:bool(true)
var_dump($a instanceof $b); // 輸出:bool(false)
// the classes are the same
var_dump($a instanceof foo); // 輸出:bool(true)
var_dump($a instanceof bar); // 輸出:bool(true)
var_dump($b instanceof foo); // 輸出:bool(true)
var_dump($b instanceof bar); // 輸出:bool(true)
- **
class_exists
— 檢查類是否已定義**
// 說明:class_exists ( string $class_name [, bool $autoload = true ] ) : bool
if (class_exists('MyClass')) {
$myclass = new MyClass();
}
- **
get_called_class
— 後期靜態繫結(”Late Static Binding”)類的名稱**
// 說明:get_called_class ( void ) : string
class foo {
static public function test() {
var_dump(get_called_class());
}
}
class bar extends foo {
}
foo::test(); // 輸出:string(3) "foo"
bar::test(); // 輸出:string(3) "bar"
2019/01/27
Math 函式 No.2
- **
max
— 找出最大值**
// 說明:max ( array $values ) : mixed、max ( mixed $value1 , mixed $value2 [, mixed $... ] ) : mixed
// 如果僅有一個引數且為陣列,max() 返回該陣列中最大的值。如果第一個引數是整數、字串或浮點數,則至少需要兩個引數而 max() 會返回這些值中最大的一個。可以比較無限多個值。
echo max(1, 3, 5, 6, 7); // 7
echo max(array(2, 4, 5)); // 5
// 當 hello 被轉換為整數時轉化為了 0 ,兩個值相等
echo max(0, 'hello'); // 0
// hello 的長度要比 0 長,所以輸出 hello
echo max('hello', 0); // hello
echo max('42', 3); // '42'
// 這裡 0 > -1, 所以返回 hello
echo max(-1, 'hello'); // hello
// 多個陣列長度不同時,返回長度長的
$val = max(array(2, 2, 2), array(1, 1, 1, 1)); // array(1, 1, 1, 1)
// 對多個陣列,max 從左向右比較。
// 因此在本例中:2 == 2,但 4 < 5
$val = max(array(2, 4, 8), array(2, 5, 7)); // array(2, 5, 7)
// 如果同時給出陣列和非陣列作為引數,則總是將陣列視為
// 最大值返回
$val = max('string', array(2, 5, 7), 42); // array(2, 5, 7)
- **
min
— 找出最小值**
// 說明:min ( array $values ) : mixed、min ( mixed $value1 , mixed $value2 [, mixed $... ] ) : mixed
// 如果僅有一個引數且為陣列,min() 返回該陣列中最小的值。如果給出了兩個或更多引數, min() 會返回這些值中最小的一個。
echo min(2, 3, 1, 6, 7); // 1
echo min(array(2, 4, 5)); // 2
echo min(0, 'hello'); // 0
echo min('hello', 0); // hello
echo min('hello', -1); // -1
// 對多個陣列,min 從左向右比較。
// 因此在本例中:2 == 2,但 4 < 5
$val = min(array(2, 4, 8), array(2, 5, 1)); // array(2, 4, 8)
// 如果同時給出陣列和非陣列作為引數,則不可能返回陣列,因為
// 陣列被視為最大的
$val = min('string', array(2, 5, 7), 42); // string
- **
mt_rand
— 生成更好的隨機數**
// 說明:mt_rand ( void ) : int、mt_rand ( int $min , int $max ) : int
// 很多老的 libc 的隨機數發生器具有一些不確定和未知的特性而且很慢。PHP 的 rand() 函式預設使用 libc 隨機數發生器。mt_rand() 函式是非正式用來替換它的。該函式用了 » Mersenne Twister 中已知的特性作為隨機數發生器,它可以產生隨機數值的平均速度比 libc 提供的 rand() 快四倍。
echo mt_rand() . "\n"; // 輸出:1604716014
echo mt_rand() . "\n"; // 輸出:1478613278
echo mt_rand(5, 15); // 輸出:6
- **
mt_getrandmax
— 顯示隨機數的最大可能值**
// 說明:mt_getrandmax ( void ) : int
// 返回撥用 mt_rand() 所能返回的最大的隨機數。
function randomFloat($min = 0, $max = 1) {
return $min + mt_rand() / mt_getrandmax() * ($max - $min);
}
var_dump(randomFloat()); // 輸出:float(0.91601131712832)
var_dump(randomFloat(2, 20)); // 輸出:float(16.511210331931)
- **
round
— 對浮點數進行四捨五入**
// 說明:round ( float $val [, int $precision = 0 [, int $mode = PHP_ROUND_HALF_UP ]] ) : float
echo round(3.4); // 3
echo round(3.5); // 4
echo round(3.6); // 4
echo round(3.6, 0); // 4
echo round(1.95583, 2); // 1.96
echo round(1241757, -3); // 1242000
echo round(5.045, 2); // 5.05
echo round(5.055, 2); // 5.06
2019/01/26
Math 函式 No.1
- **
ceil
— 進一法取整**
// 說明:ceil ( float $value ) : float
// 返回不小於 value 的下一個整數,value 如果有小數部分則進一位
echo ceil(4.3); // 5
echo ceil(9.999); // 10
echo ceil(-3.14); // -3
- **
exp
— 計算 e 的指數**
// 說明:exp ( float $arg ) : float
// 返回 e 的 arg 次方值,用 'e' 作為自然對數的底 2.718282.
echo exp(12) . "\n"; //輸出:1.6275E+005
echo exp(5.7); // 輸出:298.87
- **
floor
— 捨去法取整**
// 說明:floor ( float $value ) : float
// 返回不大於 value 的最接近的整數,捨去小數部分取整。
echo floor(4.3); // 4
echo floor(9.999); // 9
echo floor(-3.14); // -4
- **
fmod
— 返回除法的浮點數餘數**
// 說明:fmod ( float $x , float $y ) : float
// 返回被除數(x)除以除數(y)所得的浮點數餘數。餘數(r)的定義是:x = i * y + r,其中 i 是整數。如果 y 是非零值,則 r 和 x 的符號相同並且其數量值小於 y。
$x = 5.7;
$y = 1.3;
$r = fmod($x, $y);
echo $r; // 輸出:0.5 (4 * 1.3 + 0.5 = 5.7)
- **
getrandmax
— 顯示隨機數最大的可能值**
// 說明:getrandmax ( void ) : int
// 返回撥用 rand() 可能返回的最大值。
echo(getrandmax()); // 輸出:2147483647
2019/01/25
函式處理 函式
- **
func_num_args
— 返回傳遞給函式的引數個數**
// 說明:func_num_args ( void ) : int
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs\n";
}
foo(1, 2, 3); // 輸出:Number of arguments: 3
- **
func_get_arg
— 返回引數列表的某一項**
// 說明:func_get_arg ( int $arg_num ) : mixed
// arg_num:引數的偏移量。函式的引數是從0開始計數的。
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs\n";
if ($numargs >= 2) {
echo "Second argument is: " . func_get_arg(1) . "\n";
}
}
foo (1, 2, 3);
// 輸出:
// Number of arguments: 3
// Second argument is: 2
- **
func_get_args
— 返回一個包含函式引數列表的陣列**
// 說明:func_get_args ( void ) : array
function foo()
{
$numargs = func_num_args();
echo "Number of arguments: $numargs<br />\n";
if ($numargs >= 2) {
echo "Second argument is: " . func_get_arg(1) . "<br />\n";
}
$arg_list = func_get_args();
for ($i = 0; $i < $numargs; $i++) {
echo "Argument $i is: " . $arg_list[$i] . "<br />\n";
}
}
foo(1, 2, 3);
// 輸出:
// Number of arguments: 3<br />
// Second argument is: 2<br />
// Argument 0 is: 1<br />
// Argument 1 is: 2<br />
// Argument 2 is: 3<br />
- **
function_exists
— 如果給定的函式已經被定義就返回 TRUE**
// 說明:function_exists ( string $function_name ) : bool
if (function_exists('imap_open')) {
echo "IMAP functions are available.<br />\n";
} else {
echo "IMAP functions are not available.<br />\n";
}
// 輸出:IMAP functions are not available.<br />
- **
get_defined_functions
— 返回所有已定義函式的陣列**
// 說明:get_defined_functions ([ bool $exclude_disabled = FALSE ] ) : array
// exclude_disabled:禁用的函式是否應該在返回的資料裡排除
function myrow($id, $data)
{
return "<tr><th>$id</th><td>$data</td></tr>\n";
}
$arr = get_defined_functions();
print_r($arr);
// 輸出:
Array
(
[internal] => Array
(
[0] => zend_version
[1] => func_num_args
[2] => func_get_arg
[3] => func_get_args
[4] => strlen
[5] => strcmp
[6] => strncmp
...
[750] => bcscale
[751] => bccomp
)
[user] => Array
(
[0] => myrow
)
)
2019/01/24
函式處理 函式
- **
call_user_func_array
— 呼叫回撥函式,並把一個陣列引數作為回撥函式的引數**
// 說明:call_user_func_array ( callable $callback , array $param_arr ) : mixed
function foobar($arg, $arg2) {
echo __FUNCTION__, " got $arg and $arg2\n";
}
class foo {
function bar($arg, $arg2) {
echo __METHOD__, " got $arg and $arg2\n";
}
}
// Call the foobar() function with 2 arguments
call_user_func_array("foobar", array("one", "two")); // 輸出:foobar got one and two
// Call the $foo->bar() method with 2 arguments
$foo = new foo;
call_user_func_array(array($foo, "bar"), array("three", "four")); // 輸出:foo::bar got three and four
- **
call_user_func
— 把第一個引數作為回撥函式呼叫**
// 說明:call_user_func ( callable $callback [, mixed $parameter [, mixed $... ]] ) : mixed
function barber($type)
{
echo "You wanted a $type haircut, no problem\n";
}
call_user_func('barber', "mushroom"); // 輸出:You wanted a mushroom haircut, no problem
call_user_func('barber', "shave"); // 輸出:You wanted a shave haircut, no problem
- **
create_function
— 建立一個匿名函式**
// 說明:create_function ( string $args , string $code ) : string
// log():返回自然對數
$newfunc = create_function('$a,$b', 'return "ln($a) + ln($b) = " . log($a * $b);');
echo "New anonymous function: $newfunc\n";
// M_E:常量值:2.7182818284590452354
echo $newfunc(2, M_E) . "\n";
// 輸出:
// New anonymous function: lambda_1
// ln(2) + ln(2.718281828459) = 1.6931471805599
- **
forward_static_call_array
— 呼叫靜態方法並將引數作為陣列傳遞**
// 說明:forward_static_call_array ( callable $function , array $parameters ) : mixed
class A
{
const NAME = 'A';
public static function test() {
$args = func_get_args();
echo static::NAME, " ".join(',', $args)." \n";
}
}
class B extends A
{
const NAME = 'B';
public static function test() {
echo self::NAME, "\n";
forward_static_call_array(array('A', 'test'), array('more', 'args'));
forward_static_call_array( 'test', array('other', 'args'));
}
}
B::test('foo');
// join:implode 的別名
function test() {
$args = func_get_args();
echo "C ".join(',', $args)." \n";
}
// 輸出:
// B
// B more,args
// C other,args
- **
forward_static_call
— 呼叫靜態方法**
// 說明:forward_static_call ( callable $function [, mixed $parameter [, mixed $... ]] ) : mixed
class A
{
const NAME = 'A';
public static function test() {
$args = func_get_args();
echo static::NAME, " ".join(',', $args)." \n";
}
}
class B extends A
{
const NAME = 'B';
public static function test() {
echo self::NAME, "\n";
forward_static_call(array('A', 'test'), 'more', 'args');
forward_static_call( 'test', 'other', 'args');
}
}
B::test('foo');
function test() {
$args = func_get_args();
echo "C ".join(',', $args)." \n";
}
// 輸出:
// B
// B more,args
// C other,args
2019/01/23
字串相關函式 No.2
- **
sscanf
— 根據指定格式解析輸入的字元**
// 說明:sscanf ( string $str , string $format [, mixed &$... ] ) : mixed
// getting the serial number
list($serial) = sscanf("SN/2350001", "SN/%d");
// and the date of manufacturing
$mandate = "January 01 2000";
list($month, $day, $year) = sscanf($mandate, "%s %d %d");
echo "Item $serial was manufactured on: $year-" . substr($month, 0, 3) . "-$day\n";
// 輸出:Item 2350001 was manufactured on: 2000-Jan-1
- **
strlen
— 獲取字串長度**
// 說明:strlen ( string $string ) : int
$str = 'abcdef';
echo strlen($str); // 6
$str = ' ab cd ';
echo strlen($str); // 7
- **
strpbrk
— 在字串中查詢一組字元的任何一個字元**
// 說明:strpbrk ( string $haystack , string $char_list ) : string
$text = 'This is a Simple text.';
// 輸出 "is is a Simple text.",因為 'i' 先被匹配
echo strpbrk($text, 'mi');
// 輸出 "Simple text.",因為字元區分大小寫
echo strpbrk($text, 'S');
- **
preg_match
— 執行匹配正規表示式**
// 說明:preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] ) : int
// 從URL中獲取主機名稱
preg_match('@^(?:http://)?([^/]+)@i',
"http://www.runoob.com/index.html", $matches);
$host = $matches[1];
// 獲取主機名稱的後面兩部分
preg_match('/[^.]+\.[^.]+$/', $host, $matches);
echo "domain name is: {$matches[0]}\n";
// 輸出:domain name is: runoob.com
- **
wordwrap
— 打斷字串為指定數量的字串**
// 說明:wordwrap ( string $str [, int $width = 75 [, string $break = "\n" [, bool $cut = FALSE ]]] ) : string
$text = "The quick brown fox jumped over the lazy dog.";
$newtext = wordwrap($text, 20, "、");
echo $newtext;
// 輸出:The quick brown fox、jumped over the lazy、dog.
2019/01/22
字串相關函式 No.1
- **
sprintf
— 返回格式化的字串**
// 說明:sprintf ( string $format [, mixed $... ] ) : string
// string - s
// integer - d, u, c, o, x, X, b
// double - g, G, e, E, f, F
$num = 5;
$location = 'tree';
$format = 'There are %d monkeys in the %s';
echo sprintf($format, $num, $location); // 輸出:"There are 5 monkeys in the tree"
// 指定順序
$format = 'The %2$s contains %1$d monkeys';
echo sprintf($format, $num, $location);// 輸出:"The tree contains 5 monkeys"
- **
ltrim
— 刪除字串開頭的空白字元(或其他字元)**
// 說明:ltrim ( string $str [, string $character_mask ] ) : string
$text = "\t\tThese are a few words :) ... ";
$binary = "\x09Example string\x0A";
$hello = "Hello World";
$trimmed = ltrim($text);
echo $trimmed; // 輸出:"These are a few words :) ... "
$trimmed = ltrim($text, " \t.");
var_dump($trimmed);// 輸出:"These are a few words :) ... "
$trimmed = ltrim($hello, "Hdle");
var_dump($trimmed);// 輸出:"o World"
// 刪除 $binary 開頭的 ASCII 控制字元
// (從 0 到 31,包括 0 和 31)
$clean = ltrim($binary, "\x00..\x1F");
var_dump($clean);// 輸出:"These are a few words :) ... "
// trim、ltrim、rtrim 都是類似的:左右都過濾、左過濾、右過濾
- **
strtolower
— 將字串轉化為小寫**
// 說明:strtolower ( string $string ) : string
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtolower($str);
echo $str; // 列印 mary had a little lamb and she loved it so
- **
strtoupper
— 將字串轉化為大寫**
// 說明:strtoupper ( string $string ) : string
$str = "Mary Had A Little Lamb and She LOVED It So";
$str = strtoupper($str);
echo $str; // 列印 MARY HAD A LITTLE LAMB AND SHE LOVED IT SO
- **
strtok
— 標記分割字串**
// 說明:strtok ( string $str , string $token ) : string 、strtok ( string $token ) : string
$string = "This is\tan example\nstring";
// 注意僅第一次呼叫 strtok 函式時使用 string 引數。後來每次呼叫 strtok,都將只使用 token 引數,因為它會記住它在字串 string 中的位置。如果要重新開始分割一個新的字串,你需要再次使用 string 來呼叫 strtok 函式,以便完成初始化工作。注意可以在 token 引數中使用多個字元。字串將被該引數中任何一個字元分割。
$tok = strtok($string, " \n\t");
while ($tok !== false) {
echo "Word=$tok";
$tok = strtok(" \n\t");
}
// 輸出:Word=This Word=is Word=an Word=example Word=string
$first_token = strtok('/something', '/');
$second_token = strtok('/');
var_dump($first_token, $second_token); // 輸出: string(9) "something" 、 bool(false)
2019/01/21
陣列相關函式 No.6
- **
array_key_exists
— 檢查陣列裡是否有指定的鍵名或索引**
// 說明:array_key_exists ( mixed $key , array $array ) : bool
$search_array = array('first' => 1, 'second' => 4);
if (array_key_exists('first', $search_array)) {
echo "The 'first' element is in the array";
}
// array_key_exists() 與 isset() 的對比
$search_array = array('first' => null, 'second' => 4);
// returns false
isset($search_array['first']);
// returns true
array_key_exists('first', $search_array);
- **
key
— 從關聯陣列中取得鍵名**
// 說明:key ( array $array ) : mixed
$array = array(
'fruit1' => 'apple',
'fruit2' => 'orange',
'fruit3' => 'grape',
'fruit4' => 'apple',
'fruit5' => 'apple');
// this cycle echoes all associative array
// key where value equals "apple"
while ($fruit_name = current($array)) {
if ($fruit_name == 'apple') {
echo key($array);
}
next($array);
}
// 輸出:fruit1、fruit4、fruit5
- **
sort
— 對陣列排序**
// 說明:sort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
/**
* sort_flags:第二個引數介紹
*
* SORT_REGULAR - 正常比較單元(不改變型別)
* SORT_NUMERIC - 單元被作為數字來比較
* SORT_STRING - 單元被作為字串來比較
* SORT_LOCALE_STRING - 根據當前的區域(locale)設定來把單元當作字串比較,可以用 setlocale() 來改變。
* SORT_NATURAL - 和 natsort() 類似對每個單元以“自然的順序”對字串進行排序。 PHP 5.4.0 中新增的。
* SORT_NATURAL - 和 natsort() 類似對每個單元以“自然的順序”對字串進行排序。 PHP 5.4.0 中新增的。
*/
$fruits = array("lemon", "orange", "banana", "apple");
sort($fruits);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}
// 輸出:fruits[0] = apple、fruits[1] = banana、fruits[2] = lemon、fruits[3] = orange
// 帶 sort_flags 引數:
$fruits = array(
"Orange1", "orange2", "Orange3", "orange20"
);
sort($fruits, SORT_NATURAL | SORT_FLAG_CASE);
foreach ($fruits as $key => $val) {
echo "fruits[" . $key . "] = " . $val . "\n";
}
// 輸出:fruits[0] = Orange1、fruits[1] = orange2、fruits[2] = Orange3、fruits[3] = orange20
- **
natcasesort
— 用“自然排序”演算法對陣列進行不區分大小寫字母的排序**
// 說明:natcasesort ( array &$array ) : bool
$array1 = $array2 = array('IMG0.png', 'img12.png', 'img10.png', 'img2.png', 'img1.png', 'IMG3.png');
sort($array1);
print_r($array1); // 輸出:['IMG0.png', 'IMG3.png', 'img1.png', 'img10.png', 'img12.png', 'img2.png']
natcasesort($array2);
print_r($array2); // 輸出:['IMG0.png', 'img1.png', 'img2.png', 'IMG3.png', 'img10.png', 'img12.png']
- **
usort
— 使用使用者自定義的比較函式對陣列中的值進行排序**
// 說明:usort ( array &$array , callable $value_compare_func ) : bool
function cmp($a, $b)
{
if ($a == $b) {
return 0;
}
return ($a < $b) ? -1 : 1;
}
$a = array(3, 2, 5, 6, 1);
usort($a, "cmp");
foreach ($a as $key => $value) {
echo "$key: $value\n";
}
// 輸出:[1, 2, 3, 5, 6]
2019/01/20
陣列相關函式 No.5
- **
reset
— 將陣列的內部指標指向第一個單元**
// 說明:reset ( array &$array ) : mixed
$array = array('step one', 'step two', 'step three', 'step four');
// by default, the pointer is on the first element
echo current($array) . "<br />\n"; // "step one"
// skip two steps
next($array);
next($array);
echo current($array) . "<br />\n"; // "step three"
// reset pointer, start again on step one
reset($array);
echo current($array) . "<br />\n"; // "step one"
- **
list
— 把陣列中的值賦給一組變數**
// 說明:list ( mixed $var1 [, mixed $... ] ) : array
$info = array('coffee', 'brown', 'caffeine');
// 列出所有變數
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";
// 列出他們的其中一個
list($drink, , $power) = $info;
echo "$drink has $power.\n";
// 或者讓我們跳到僅第三個
list( , , $power) = $info;
echo "I need $power!\n";
// list() 不能對字串起作用
list($bar) = "abcde";
var_dump($bar); // NULL
- **
each
— 返回陣列中當前的鍵/值對並將陣列指標向前移動一步**
// 說明:each ( array &$array ) : array
// 返回 array 陣列中當前指標位置的鍵/值對並向前移動陣列指標。鍵值對被返回為四個單元的陣列,鍵名為0,1,key和 value。單元 0 和 key 包含有陣列單元的鍵名,1 和 value 包含有資料。
// 如果內部指標越過了陣列的末端,則 each() 返回 FALSE。
$foo = array("bob", "fred", "jussi", "jouni", "egon", "marliese");
$bar = each($foo);
print_r($bar); // [1 => "bob", "value" => "bob", 0 => 0, "key" => 0]
// 我們來看一下 list 與 each 和 reset 的連用
$fruit = array('a' => 'apple', 'b' => 'banana', 'c' => 'cranberry');
reset($fruit);
while (list($key, $val) = each($fruit)) {
echo "$key => $val\n";
}
// 輸出:["a" => "apple", "b" => "banana", "c" => "cranberry"]
- **
end
— 將陣列的內部指標指向最後一個單元**
// 說明:end ( array &$array ) : mixed
$fruits = array('apple', 'banana', 'cranberry');
echo end($fruits); // cranberry
- **
extract
— 從陣列中將變數匯入到當前的符號表**
// 說明:extract ( array &$array [, int $flags = EXTR_OVERWRITE [, string $prefix = NULL ]] ) : int
// 符號表是指當前php頁面中,所有變數名稱的集合
/**
* flag:第二個引數介紹
* EXTR_OVERWRITE:如果有衝突,覆蓋已有的變數。
* EXTR_SKIP:如果有衝突,不覆蓋已有的變數。
* EXTR_PREFIX_SAME:如果有衝突,在變數名前加上字首 prefix。
* EXTR_PREFIX_ALL:給所有變數名加上字首 prefix。
* EXTR_PREFIX_INVALID:僅在非法/數字的變數名前加上字首 prefix。
* EXTR_IF_EXISTS:僅在當前符號表中已有同名變數時,覆蓋它們的值。其它的都不處理。 舉個例子,以下情況非常有用:定義一些有效變數,然後從 $_REQUEST 中僅匯入這些已定義的變數。
* EXTR_PREFIX_IF_EXISTS:僅在當前符號表中已有同名變數時,建立附加了字首的變數名,其它的都不處理。
* EXTR_REFS:將變數作為引用提取。這有力地表明瞭匯入的變數仍然引用了 array 引數的值。可以單獨使用這個標誌或者在 flags 中用 OR 與其它任何標誌結合使用。
*
* 如果沒有指定 flags,則被假定為 EXTR_OVERWRITE。
*/
/* 假定 $var_array 是 wddx_deserialize 返回的陣列*/
$size = "large";
$var_array = array("color" => "blue",
"size" => "medium",
"shape" => "sphere");
extract($var_array, EXTR_PREFIX_SAME, "wddx");
echo "$color, $size, $shape, $wddx_size\n"; // 輸出:blue, large, sphere, medium
2019/01/19
陣列相關函式 No.4
- **
array_walk_recursive
— 對陣列中的每個成員遞迴地應用使用者函式**
// 說明:array_walk_recursive ( array &$array , callable $callback [, mixed $userdata = NULL ] ) : bool
$sweet = array('a' => 'apple', 'b' => 'banana');
$fruits = array('sweet' => $sweet, 'sour' => 'lemon');
function test_print($item, $key)
{
echo "$key holds $item\n";
}
array_walk_recursive($fruits, 'test_print'); // 輸出:"a holds apple"、"b holds banana"、"sour holds lemon"
// 注意上例中的鍵 'sweet' 並沒有顯示出來。任何其值為 array 的鍵都不會被傳遞到回撥函式中去。
- **
arsort
— 對陣列進行逆向排序並保持索引關係**
// 說明:arsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
arsort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
// 輸出:a = orange ;d = lemon;b = banana;c = apple
- **
asort
— 對陣列進行排序並保持索引關係**
// 說明:asort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) : bool
$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
asort($fruits);
foreach ($fruits as $key => $val) {
echo "$key = $val\n";
}
// 輸出:c = apple;b = banana;d = lemon;a = orange
- **
compact
— 建立一個陣列,包括變數名和它們的值**
// 說明:compact ( mixed $varname1 [, mixed $... ] ) : array
$city = "San Francisco";
$state = "CA";
$event = "SIGGRAPH";
$location_vars = array("city", "state");
$result = compact("event", "nothing_here", $location_vars);
print_r($result); // 輸出:["event" => "SIGGRAPH", "city" => "San Francisco", "state" => "CA"]
- **
current
— 返回陣列中的當前單元**
// 說明:current ( array &$array ) : mixed
$transport = array('foot', 'bike', 'car', 'plane');
$mode = current($transport); // $mode = 'foot';
$mode = next($transport); // $mode = 'bike';
$mode = current($transport); // $mode = 'bike';
$mode = prev($transport); // $mode = 'foot';
$mode = end($transport); // $mode = 'plane';
$mode = current($transport); // $mode = 'plane';
$arr = array();
var_dump(current($arr)); // bool(false)
$arr = array(array());
var_dump(current($arr)); // array(0) { }
2019/01/18
- **
array_combine
— 建立一個陣列,用一個陣列的值作為其鍵名,另一個陣列的值作為其值**
// 說明:array_combine ( array $keys , array $values ) : array
// 兩個陣列數量如果不一致的情況是會出現警告的噢
$a = array('green', 'red', 'yellow');
$b = array('avocado', 'apple', 'banana');
$c = array_combine($a, $b);
print_r($c); // 輸出:['green' => 'avocado', 'red' => 'apple', 'yellow' => 'banana']
- **
array_count_values
— 統計陣列中所有的值**
// 說明:array_count_values ( array $array ) : array
$array = array(1, "hello", 1, "world", "hello");
print_r(array_count_values($array)); // 輸出:[1 => 2, "hello" => 2, "world" => 1]
- **
array_diff_assoc
— 帶索引檢查計算陣列的差集**
// 說明:array_diff_assoc ( array $array1 , array $array2 [, array $... ] ) : array
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_assoc($array1, $array2);
print_r($result); // 輸出:["b" => "brown", "c" => "blue", 0 => "red"]
// 大家可以發現這裡 red 有輸出,為啥呢,因為第二個陣列中 red 的 key 為 1。與陣列一中的 key 為 0,不一致,所以有輸出。
- **
array_diff_key
— 使用鍵名比較計算陣列的差集**
// 說明:array_diff_key ( array $array1 , array $array2 [, array $... ] ) : array
$array1 = array('blue' => 1, 'red' => 2, 'green' => 3, 'purple' => 4);
$array2 = array('green' => 5, 'blue' => 6, 'yellow' => 7, 'cyan' => 8);
var_dump(array_diff_key($array1, $array2)); // 輸出:['red' => 2, 'purple' => 4]
- **
array_diff_uassoc
— 用使用者提供的回撥函式做索引檢查來計算陣列的差集**
// 說明:array_diff_uassoc ( array $array1 , array $array2 [, array $... ], callable $key_compare_func ) : array
function key_compare_func($a, $b)
{
if ($a === $b) {
return 0;
}
return ($a > $b)? 1:-1;
}
$array1 = array("a" => "green", "b" => "brown", "c" => "blue", "red");
$array2 = array("a" => "green", "yellow", "red");
$result = array_diff_uassoc($array1, $array2, "key_compare_func");
print_r($result); // 輸出:["b" => "brown", "c" => "blue", 0 => "red"]
// 這個回掉函式有點沒看明白啊 。。。。
2019/01/17
陣列相關函式 No.2
- **
array_filter
— 用回撥函式過濾陣列中的單元**
// 說明:array_filter ( array $array [, callable $callback [, int $flag = 0 ]] ) : array
// 如果沒有傳遞迴掉函式,就起到過濾陣列中空值的方法了
function odd($var)
{
// & 按位與
return($var & 1);
}
function even($var)
{
// returns whether the input integer is even
return(!($var & 1));
}
$array1 = array("a" => 1, "b" => 2, "c" => 3, "d" => 4, "e" => 5);
$array2 = array(6, 7, 8, 9, 10, 11, 12);
print_r(array_filter($array1, "odd")); // 輸出:["a" => 1, "c" => 3, "e" => 5]
print_r(array_filter($array2, "even")); // 輸出:[6, 8, 10, 12]
- **
array_unshift
— 在陣列開頭插入一個或多個單元**
// 說明:array_unshift ( array &$array [, mixed $... ] ) : int
$queue = array("orange", "banana");
array_unshift($queue, "apple", "raspberry");
print_r($queue); // 輸出:["apple", "raspberry", "orange", "banana"]
- **
array_shift
— 將陣列開頭的單元移出陣列**
// 說明:array_shift ( array &$array ) : mixed
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_shift($stack);
print_r($stack); // 輸出:["banana", "apple", "raspberry"]
- **
array_pop
— 彈出陣列最後一個單元(出棧)**
// 說明:array_pop ( array &$array ) : mixed
$stack = array("orange", "banana", "apple", "raspberry");
$fruit = array_pop($stack);
print_r($stack); // 輸出:["orange", "banana", "apple"]
- **
array_push
— 將一個或多個單元壓入陣列的末尾(入棧)**
// 說明:array_push ( array &$array , mixed $value1 [, mixed $... ] ) : int
$stack = array("orange", "banana");
array_push($stack, "apple", "raspberry");
print_r($stack); // 輸出:["orange", "banana", "apple", "raspberry"]
2019/01/16
- **
array_fill
— 用給定的值填充陣列**
// 說明:array_fill ( int $start_index , int $num , mixed $value ) : array
// 如果 start_index 是負數, 那麼返回的陣列的第一個索引將會是 start_index ,而後面索引則從0開始
$a = array_fill(6, 6, 'banana');
$b = array_fill(-2, 4, 'pear');
print_r($a); // 輸出:[6 => 'banana', 7 => 'banana', 8 => 'banana', 9 => 'banana', 10 => 'banana']
print_r($b); // 輸出:[-2 => 'pear', 0 => 'pear', 1 => 'pear', 2 => 'pear']
- **
array_chunk
— 將一個陣列分割成多個**
// 說明:array_chunk ( array $array , int $size [, bool $preserve_keys = false ] ) : array
// 第三個引數如果設為 TRUE,可以使 PHP 保留輸入陣列中原來的鍵名
$input_array = array('a', 'b', 'c', 'd', 'e');
print_r(array_chunk($input_array, 2)); // 輸出:[['a','b'],['c','d'],['e']]
print_r(array_chunk($input_array, 2, true)); // 輸出:[[1 => 'a',3 => 'b'],[5 => 'c',7 => 'd'],[9 => 'e']]
- **
array_slice
— 從陣列中取出一段**
// 說明:array_slice ( array $array , int $offset [, int $length = NULL [, bool $preserve_keys = false ]] ) : array
// 第二個引數如果為負,則序列將從 array 中距離末端這麼遠的地方開始
// 第三個引數如果設為 TRUE,可以使 PHP 保留輸入陣列中原來的鍵名
$input = array("a", "b", "c", "d", "e");
$output = array_slice($input, 2); // [ "c", "d", "e"]
$output = array_slice($input, -2, 1); // ["d"]
$output = array_slice($input, 0, 3); // ["a", "b", "c"]
// note the differences in the array keys
print_r(array_slice($input, 2, -1)); // 輸出:["c", "d"]
print_r(array_slice($input, 2, -2, true)); // 輸出:[2 => "c"]
- **
array_diff
— 計算陣列的差集**
// 說明:array_diff ( array $array1 , array $array2 [, array $... ] ) : array
$array1 = array("a" => "green", "red", "blue", "red");
$array2 = array("b" => "green", "yellow", "red");
$result = array_diff($array1, $array2);
print_r($result); // 輸出:[1 => "blue"]
- **
array_intersect
— 計算陣列的交集**
// 說明:array_intersect ( array $array1 , array $array2 [, array $... ] ) : array
$array1 = array("a" => "green", "red", "blue");
$array2 = array("b" => "green", "yellow", "red");
$result = array_intersect($array1, $array2);
print_r($result); // 輸出:["a" => "green", "red"]
2019/01/15
- **
strip_tags
— 從字串中去除 HTML 和 PHP 標記**
// 說明:strip_tags ( string $str [, string $allowable_tags ] ) : string
$text = '<p>Test paragraph.</p><!-- Comment --> <a href="#fragment">Other text</a>';
echo strip_tags($text); // 輸出:Test paragraph. Other text
// 允許 <p> 和 <a>
echo strip_tags($text, '<p><a>'); // 輸出:<p>Test paragraph.</p> <a href="#fragment">Other text</a>
- **
explode
— 使用一個字串分割另一個字串**
// 說明:explode ( string $delimiter , string $string [, int $limit ] ) : array
// 示例 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // 輸出:piece1
echo $pieces[1]; // 輸出:piece2
// 示例 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // 輸出:foo
echo $pass; // 輸出:*
- **
implode
— 將一個一維陣列的值轉化為字串**
// 說明:implode ( string $glue , array $pieces ) : string
$array = array('lastname', 'email', 'phone');
$comma_separated = implode(", ", $array);
echo $comma_separated; // 輸出:lastname, email, phone
// Empty string when using an empty array:
var_dump(implode('hello', array())); // 輸出:string(0) ""
- **
substr
— 返回字串的子串**
// 說明:substr ( string $string , int $start [, int $length ] ) : string
$rest = substr("abcdef", -1); // 返回 "f"
$rest = substr("abcdef", -2); // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"
- **
str_word_count
— 返回字串中單詞的使用情況**
// 說明:str_word_count ( string $string [, int $format = 0 [, string $charlist ]] ) : mixed
/**
* format -> 指定函式的返回值,當前支援的值如下:
*
* 0 - 返回單詞數量
* 1 - 返回一個包含 string 中全部單詞的陣列
* 2 - 返回關聯陣列。陣列的鍵是單詞在 string 中出現的數值位置,陣列的值是這個單詞
*
* charlist -> 附加的字串列表,其中的字元將被視為單詞的一部分
*/
$str = "Hello fri3nd, you're looking good today!";
print_r(str_word_count($str, 1)); // 輸出:["Hello", "fri", "nd", "you're", "looking", "good", "today"]
print_r(str_word_count($str, 2)); // 輸出:["Hello", "fri", "nd", "you're", "looking", "good", "today"]
print_r(str_word_count($str, 1, '3')); // 輸出:[''Hello", "fri3nd", "you're", "looking", "good", "today"]
echo str_word_count($str); // 輸出:7
2019/01/14
- **
abs
— 絕對值**
// 說明:abs ( mixed $number ) : number
$abs = abs(-4.2); // $abs = 4.2; (double/float)
$abs2 = abs(5); // $abs2 = 5; (integer)
$abs3 = abs(-5); // $abs3 = 5; (integer)
- **
str_pad
— 使用另一個字串填充字串為指定長度**
// 說明:str_pad ( string $input , int $pad_length [, string $pad_string = " " [, int $pad_type = STR_PAD_RIGHT ]] ) : string
$input = "Alien";
echo str_pad($input, 10); // 輸出 "Alien "
echo str_pad($input, 10, "-=", STR_PAD_LEFT); // 輸出 "-=-=-Alien"
echo str_pad($input, 10, "_", STR_PAD_BOTH); // 輸出 "__Alien___"
echo str_pad($input, 6, "___"); // 輸出 "Alien_"
echo str_pad($input, 3, "*"); // 輸出 "Alien"
- **
str_repeat
— 重複一個字串**
// 說明:str_repeat ( string $input , int $multiplier ) : string
echo str_repeat("-=", 10); // 輸出 "-=-=-=-=-=-=-=-=-=-="
- **
str_split
— 將字串轉換為陣列**
// 說明:str_split ( string $string [, int $split_length = 1 ] ) : array
$str = "Hello";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
print_r($arr1); // 輸出:["H", "e", "l", "l", "o"]
print_r($arr2); // 輸出:["Hel", "lo"]
- **
strrev
— 反轉字串**
// 說明:strrev ( string $string ) : string
echo strrev("Hello world!"); // 輸出 "!dlrow olleH"
2019/01/13
- **
is_numeric
— 檢測變數是否為數字或數字字串 **
// 說明:is_numeric ( mixed $var ) : bool
- **
array_column
— 返回陣列中指定的一列**
// 說明:array_column ( array $input , mixed $column_key [, mixed $index_key = null ] ) : array
$records = array(
array(
'id' => 2135,
'first_name' => 'John',
'last_name' => 'Doe',
),
array(
'id' => 3245,
'first_name' => 'Sally',
'last_name' => 'Smith',
),
array(
'id' => 5342,
'first_name' => 'Jane',
'last_name' => 'Jones',
),
array(
'id' => 5623,
'first_name' => 'Peter',
'last_name' => 'Doe',
)
);
$first_names = array_column($records, 'first_name');
print_r($first_names);
// 輸出:
Array
(
[0] => John
[1] => Sally
[2] => Jane
[3] => Peter
)
$last_names = array_column($records, 'last_name', 'id');
print_r($last_names);
// 輸出:
Array
(
[2135] => Doe
[3245] => Smith
[5342] => Jones
[5623] => Doe
)
- **
array_search
— 在陣列中搜尋給定的值,如果成功則返回首個相應的鍵名 **
// 說明:array_search ( mixed $needle , array $haystack [, bool $strict = false ] ) : mixed
// 如果可選的第三個引數 strict 為 TRUE,則 array_search() 將在 haystack 中檢查完全相同的元素。 這意味著同樣嚴格比較 haystack 裡 needle 的 型別,並且物件需是同一個例項。
$array = array(0 => 'blue', 1 => 'red', 2 => 'green', 3 => 'red');
$key = array_search('green', $array); // $key = 2;
$key = array_search('red', $array); // $key = 1;
$key = array_search('white', $array); // $key = false;
- **
in_array
— 檢查陣列中是否存在某個值 **
// 說明:in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ) : bool
$os = array("Mac", "NT", "Irix", "Linux");
if (in_array("Irix", $os)) {
echo "Got Irix";
}
if (in_array("mac", $os)) {
echo "Got mac";
}
// 輸出: Got Irix (in_array 區分大小寫)
- **
array_unique
— 移除陣列中重複的值 **
// 說明:array_unique ( array $array [, int $sort_flags = SORT_STRING ] ) : array
$input = array("a" => "green", "red", "b" => "green", "blue", "red");
$result = array_unique($input);
print_r($result);
// 輸出:
Array
(
[a] => green
[0] => red
[1] => blue
)
2019/01/12
- **
array_keys
— 返回陣列中部分的或所有的鍵名 **
// 說明:array_keys ( array $array [, mixed $search_value = null [, bool $strict = false ]] ) : array
$array = array(0 => 100, "color" => "red");
print_r(array_keys($array));
$array = array("blue", "red", "green", "blue", "blue");
print_r(array_keys($array, "blue"));
$array = array("color" => array("blue", "red", "green"),
"size" => array("small", "medium", "large"));
print_r(array_keys($array));
// 輸出:
Array
(
[0] => 0
[1] => color
)
Array
(
[0] => 0
[1] => 3
[2] => 4
)
Array
(
[0] => color
[1] => size
)
- **
array_values
— 返回陣列中所有的值**
// 說明:array_values ( array $array ) : array
$array = array("size" => "XL", "color" => "gold");
print_r(array_values($array));
// 輸出:
Array
(
[0] => XL
[1] => gold
)
- **
array_merge
— 合併一個或多個陣列 **
// 說明:array_merge ( array $array1 [, array $... ] ) : array
// 如果陣列中有相同的字串鍵名,則該鍵名後面的值覆蓋前面的值;如果想讓前面的值覆蓋後面,則可以使用 + 號。
$array1 = array("color" => "red", 2, 4);
$array2 = array("a", "b", "color" => "green", "shape" => "trapezoid", 4);
$result = array_merge($array1, $array2);
print_r($result);
// 輸出:
Array
(
[color] => green
[0] => 2
[1] => 4
[2] => a
[3] => b
[shape] => trapezoid
[4] => 4
)
- **
str_shuffle
— 隨機打亂一個字串 **
// 說明:str_shuffle ( string $str ) : string
$str = 'abcdef';
$shuffled = str_shuffle($str);
echo $shuffled; // 輸出:bfdaec
- **
shuffle
— 打亂陣列 **
// 說明:shuffle ( array &$array ) : bool
$numbers = range(1, 20);
shuffle($numbers);
foreach ($numbers as $number) {
echo "$number ";
}
// 輸出:7 8 11 1 17 3 14 2 16 15 5 9 4 18 12 20 13 10 19 6
2019/01/11
- **
iconv
— 字串按要求的字元編碼來轉換 **
// 說明:iconv ( string $in_charset , string $out_charset , string $str ) : string
// 將字串 str 從 in_charset 轉換編碼到 out_charset。
$text = "This is the Euro symbol '€'.";
echo 'Original : ', $text, PHP_EOL; // 輸出:Original : This is the Euro symbol '€'.
echo 'TRANSLIT : ', iconv("UTF-8", "ISO-8859-1//TRANSLIT", $text), PHP_EOL; // 輸出:TRANSLIT : This is the Euro symbol 'EUR'.
echo 'IGNORE : ', iconv("UTF-8", "ISO-8859-1//IGNORE", $text), PHP_EOL; // 輸出:IGNORE : This is the Euro symbol ''.
echo 'Plain : ', iconv("UTF-8", "ISO-8859-1", $text), PHP_EOL; // 輸出:Plain :
Notice: iconv(): Detected an illegal character in input string in .\iconv-example.php on line 7
- **
uniqid
— 生成一個唯一ID **
// 說明:uniqid ([ string $prefix = "" [, bool $more_entropy = false ]] ) : string
// 獲取一個帶字首、基於當前時間微秒數的唯一ID。
printf("uniqid(): %s\r\n", uniqid()); // 輸出:uniqid(): 5c66c6e20fb7f
printf("uniqid('php_'): %s\r\n", uniqid('php_')); // 輸出:uniqid('php_'): php_5c66c6e20fbde
printf("uniqid('', true): %s\r\n", uniqid('', true)); // 輸出:uniqid('', true): 5c66c6e20fbe59.21437161
**
gettype
— 獲取變數的型別 **Warning! 不要使用 gettype() 來測試某種型別,因為其返回的字串在未來的版本中可能需要改變。此外,由於包含了字串的比較,它的執行也是較慢的。
**
settype
— 設定變數的型別 **
// 說明:settype ( mixed &$var , string $type ) : bool
// 將變數 var 的型別設定成 type。
$foo = "5bar"; // string
$bar = true; // boolean
settype($foo, "integer"); // $foo 現在是 5 (integer)
settype($bar, "string"); // $bar 現在是 "1" (string)
- **
getcwd
— 取得當前工作目錄 **
// 說明:getcwd ( void ) : string
// 取得當前工作目錄
echo getcwd() . "\n"; // 輸出類似:/home/didou
chdir('cvs');
echo getcwd() . "\n"; // 輸出類似:/home/didou/cvs
2019/01/10
- **
strpos
— 查詢字串首次出現的位置 **
// 說明:strpos ( string $haystack , mixed $needle [, int $offset = 0 ] ) : int
echo strpos("I love php, I love php too!","php"); // 輸出:7
- **
stripos
— 查詢字串首次出現的位置(不區分大小寫)**
// 說明:stripos ( string $haystack , string $needle [, int $offset = 0 ] ) : int
echo strpos("I love pHp, I love php too!","php"); // 輸出:19
echo stripos("I love pHp, I love php too!","php"); // 輸出:7
- **
strrpos
— 計算指定字串在目標字串中最後一次出現的位置 **
// 說明:strrpos ( string $haystack , string $needle [, int $offset = 0 ] ) : int
$foo = "0123456789a123456789b123456789c";
var_dump(strrpos($foo, '7', -5)); // 從尾部第 5 個位置開始查詢
// 結果: int(17)
var_dump(strrpos($foo, '7', 20)); // 從第 20 個位置開始查詢
// 結果: int(27)
var_dump(strrpos($foo, '7', 28)); // 結果: bool(false)
- **
strrchr
— 查詢指定字元在字串中的最後一次出現 **
說明:strrchr ( string $haystack , mixed $needle ) : string
echo strrchr("Hello world!","world"); // 輸出:world!
- **
strstr
— 查詢字串的首次出現 **
// 說明:strstr ( string $haystack , mixed $needle [, bool $before_needle = FALSE ] ) : string
$email = 'name@example.com';
$domain = strstr($email, '@');
echo $domain; // 輸出: @example.com
$user = strstr($email, '@', true); // 從 PHP 5.3.0 起
echo $user; // 輸出: name
未完待續
其實我開始寫文章的初心是對自己新學的知識點的一個總結,後面發現還有很多人看的,哈哈,挺開心的,每天上班的第一件事情就是看訊息提醒,看到那麼多的小紅心,別提有多激動了,潛移默化的就促使自己學習更加的有激情,願意寫出更多更好的文章,哈哈。
昨天晚上我在記筆記的時候,偶然想到,為什麼不放出來,讓有需要的人可以一起進步呢,哈哈,就果斷把筆記中記憶 PHP 函式的內容,就放到這裡來了,哈哈。
大家如果有建議的 PHP 函式,可以放到評論區,我來更新學習哈。
本作品採用《CC 協議》,轉載必須註明作者和本文連結