PHP in_array() 無法比較兩個陣列,這邊採取替代的作法,使用array_intersect(),取得值的交集
/* VECTOR COOL https://vector.cool */ $arr1 = array(1,2,3); $arr2 = array(1,2,3,4,5,6,7); $arr = array_intersect($arr1, $arr2); if (count($arr) > 0) { // do something }
參考資料:
[……]
這是一個很常用的功能,有時我們在處理表單發送後的資料,有時常常會多按了一些空白,這些空白可能會導致資料錯誤,或是資料轉檔時,明明看資料沒錯,怎麼就對不起來,比如說我剛剛的例子,搞了我好久
<?php $str=" 測試字串,前後空白都會被清除 "; echo trim("$str"); ?>
API回傳Json資料,怎麼看pickUpDateTime,都是沒值的,我就用empty()來做判斷,卻怎麼都友值,弄了半天是空白字元,我也不懂這API主人為什麼空值不拋要拋一堆空白自原來害人
[toStoreDateTime] => 2017/08/11 00:00:00 [pickUpDateTime] => [omTranMode] => 3203 [Status] => 50 [omReceName] => 王小明
不管!!至少問題找到了,問題就解決一半了,接著就是在用empty()作空值判斷前,先用trim()去過濾這些該死的空白
<?php $pickUpDateTime =" "; echo (empty(trim($pickUpDateTime )))?1:0; ?>
[……]
可輕鬆取檔案名稱、副檔名、根目錄相對路徑、資料夾名
pathinfo($path, PATHINFO_EXTENSION); // 參數 (選用) PATHINFO_DIRNAME //完整路徑 PATHINFO_BASENAME //完整檔名 PATHINFO_EXTENSION //副檔名 PATHINFO_FILENAME //檔名
$path_parts = pathinfo('/www/htdocs/inc/lib.inc.php'); echo $path_parts['dirname'], "n"; echo $path_parts['basename'], "n"; echo $path_parts['extension'], "n"; echo $path_parts['filename'], "n"; // since PHP 5.2.0
/www/htdocs/inc lib.inc.php php lib.inc
[……]
取年齡或年資
/* 取年資 https://vector.cool date $date 到職日 ex:2006/3/8 date $date2 = null 離職日 ex:2017/5/14 return int 年資 */ function get_age($date,$date2=NULL){ $time = (empty($date2))?time():strtotime($date2); $time = $time - strtotime($date); return intval($time / (365*24*60*60)); }
這邊有個要注意的地方,使用這方法須先設定時區
date_default_timezone_set()
第二個參數不帶則為還在職,也就是取目前時間
date_default_timezone_set("Asia/Taipei"); echo get_age('2007/6/25'); echo get_age('2007/7/28','2017/12/23');
[……]
取2日期間共幾年
/* get years between two dates https://vector.cool date $date ex:2006/3/8 date $date2 ex:2017/5/14 return int */ function get_years_between_two_dates($date,$date2=NULL){ $time = (empty($date2))?time():strtotime($date2); $time = $time - strtotime($date); return intval($time / (365*24*60*60)); }
這邊有個要注意的地方,使用這方法須先設定時區
date_default_timezone_set()
date_default_timezone_set("Asia/Taipei"); echo get_years_between_two_dates('2007/7/28','2017/12/23');
[……]
這絕對不是個好方法,我個人是不推薦使用,雖然這方法一勞永逸,但在開發PHP時,你將會知道錯誤訊息有多麼美好,Debug時才不會像無頭蒼蠅般,除非程式已經在一個很穩定的階段,不然非必要,不要關閉全部錯誤訊息,還是留給程式可以去設定是否顯示錯誤訊息的彈性。
以下介紹幾種PHP停用錯誤訊息的方法:
在PHP文件中加入,停用PHP錯誤訊息
如果還是出現錯誤訊息,請試下列方法
在.htaccess檔案中加入下面這一行 ( Apache專用 )
如果還是出現錯誤訊息,請試下列方法
在 PHP.ini 中找到 display_errors 這一行,沒這一行則添加,將值改為off。
如果短期間沒打算繼續升級的話,還是可以在PHP5.5 使用 mysqli_connect() ,但停用所有錯誤訊息好像又太極端,下面這方法可以設定錯誤訊息級別,隱藏某些特定的錯誤級別,選擇排除顯示某指定錯誤級別,排除的錯誤級別將不會顯示在錯誤訊息上,排除E_DEPRECATED,mysql_connect()就可以繼續撐拉。
以下例子顯示所有錯誤,除了下列這幾個錯誤級別:
E_DEPRECATED棄用E_NOTICE注意E_WARNING警告E_STRICT嚴格
這是最正規的方式拉,也是最推薦的,就是乖乖升級吧,雖然升級的過程中會有一段陣痛,有點痛,以下提供很簡單的範例。
mysqli_connect() 範例如下
mysqli_connect() 建表SQL如下
[……]
big5有很多字是沒有收錄的:
[……]
/** * VECTOR COOL * https://vector.cool */ //用curl傳post並取回傳值 //一定要傳絕對路徑 function curl_post($url,$post) { $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST,true); curl_setopt($ch, CURLOPT_CUSTOMREQUEST,'POST'); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); $result = curl_exec($ch); curl_close ($ch); return $result; }
/** * VECTOR COOL * https://vector.cool */ $url='http://tw.yahoo.com'; $post_value= array( 'name' => 'JACK', 'age' => '20', 'phone' => '0968123456', 'address' => '台灣' ); echo curl_post($url,$post_value);
[……]
/* https://vector.cool */ $time = strtotime('2015-03-04 12:03:25'); //output : 1425441805
一、慢慢算
/* https://vector.cool */ date_default_timezone_set("Asia/Taipei"); $next_Month = 30*24*60*60;//30天*24小時*60分*60秒 echo date('Y-m-d',strtotime('2015-03-04 12:03:25')+$next_Month);
二、使用 mktime()
/* https://vector.cool */ date_default_timezone_set("Asia/Taipei"); $date=date("Y-m-d",mktime(hr,min,sec,mon,day,year)) //例如:今天再加5天 date("y-m-d",mktime(0,0,0,date("m"),(date("d")+5),date("y")))
Reference:http://php.net/manual/zh/function.mktime.php
三、使用 strtotime()
strtotime()這東西比我想像聰明多了耶
/* https://vector.cool */ date_default_timezone_set("Asia/Taipei"); echo strtotime("now")."<br/>"; echo strtotime("10 September 2000")."<br/>"; echo strtotime("2020-09-29 +1 day")."<br/>"; echo strtotime("+1 day")."<br/>"; echo strtotime("+1 week")."<br/>"; echo strtotime("+1 week 2 days 4 hours 2 seconds")."<br/>";; echo strtotime("next Thursday")."<br/>"; echo strtotime("last Monday")."<br/>";
Reference:http://php.net/manual/zh/function.strtotime.php
[……]