PHP-Cookbook-chapter2

程式

//2.1檢查變數值是否為有效數字 
$session_name = "2.1檢查變數值是否為有效數字  ";
echo $session_name."<br>";
// is_int -> 檢查整數, is_float->檢查浮點數字, is_numeric->檢查字串裡為數字
$num1 = 'test';
if (is_float ($num1) || is_int($num1)) {
	print '$num1 是數字 <br>';
}elseif (is_numeric ($num1)){
	print '$num1 可能不是數字,但其內容為數值<br>';
}else {
	print '$num1 既不是數字,也非數值字串<br>';
}
//2.2處理一連串數字
$session_name = "2.2處理一連串數字  ";
echo $session_name."<br>";
$x =10;
$y =20;

for ($i = $x; $i <= $y; $i++){
	//$i 將會是$x到$y之間的整數
	print "$i \n";
}


$items = array ( "Linux",
				 "Apache",
				 "PHP",
				 "A",
				 "SQL",
				 "Server",
				 "Talented",
				 "Administrator");
				 
for ($i = 2; $i <=6; $i++){
     print "$items[$i]<br>";
}
//2.10 設定數字輸出格式  number_format		
$session_name = "2.10 設定數字輸出格式 ";
echo $session_name."<br>";
$num = 12500000.8356;
$num = number_format($num,2); //取到小數2位
print "$num<br>";
//2.11弧度與角度的轉換
$num1 = 90;
$num2 = 3.14;

$rad = deg2rad ($num1);
$deg = rad2deg ($num2);
print "角度 $num1 轉成弧度為 $rad <br>";
print "弧度 $num2 轉成角度為 $deg 度 <br>";
//2.13產生亂數
$session_name = "2.13產生亂數 ";
echo $session_name."<br>";

$items = array ( "Linux",
				 "Apache",
				 "PHP",
				 "A",
				 "SQL",
				 "Server",
				 "Talented",
				 "Administrator");

$rand_num = mt_rand(0,count ($items)-1);

print "rand items =>$items[$rand_num]";
// 2.14產生一個唯一的隨機數字  用檔案  @->忽略錯誤
$session_name = "<br>##2.14產生一個唯一的隨機數字  用檔案  ";
echo $session_name."<br>";

mt_srand ((double)microtime()*1000000);

$data = implode ("",file ('random_numbers.txt'));
$random_numbers = $data ? unserialize ($data) : array ();

$random =mt_rand();
while (@in_array ($random_numbers,$random));
	$random = mt_rand();
@array_push ($random_numbers,$random);

$data = serialize ($random_numbers);
$fp = fopen ("random_numbers.txt",'w');
if (!$fp){
	die ("Cannot open random_numbers.txt");
}
@fwrite ($fp,$data);
@fclose ($fp);

print "$random  為首次產生";
//2.15 亂數加權
$session_name = "<br>##2.15 亂數加權  ";
echo $session_name."<br>";
$ads =  array ( "Linux" => 1,
				"Apache" => 1,
				"PHP" => 3,
				"A" => 1,
				"SQL" => 4,
				"Server" => 10,
				"Talented" => 1,
				"Administrator" => 4
					);
$j = 0;

foreach ($ads as $company => $weight){
	for ($i = 0 ; $i < $weight ; $i++){
		$dist [$j++] = $company;
		//$j."<br>";
	}
     //echo $j."<br>";	
}
srand((double)microtime()*1000000);
$rand_num = mt_rand(0,$j -1);
@shuffle($dist); //隨機排列陣列元素

$company = $dist [$rand_num ];
print "選擇的公司是:$company<br>"; 
//2.16 將今天日期載入陣列中
$session_name = "<br>##2.16 將今天日期載入陣列中  ";
echo $session_name."<br>";
$da = getdate();
$date = "$da[mon]/$da[mday]/$da[year]";
print $date."<br>";

$datestamp = date ("j/n/Y");
print $datestamp."<br>";

list ($month,$day,$year) = explode ('/',$date);
if (checkdate ($month,$day,$year)){
	print "有效日期<br>";
}else{
	print "無效日期<br>";
}

echo "<br>--------- 日期格式: 月 / 日 / 年  ex:09/06/2024 2024年9月6日 ------<br>";

$check_date = "13/06/2024";
$check_str = is_valid_date($check_date);

echo "$check_date<br>";

$check_str= ($check_str==1) ? "是" : "否";
echo "$check_str<br>";


function is_leap_year($year){
	return ((($year%4)==0 &&($year%100)!=0)||($year%400)==0);
}
function is_valid_date ($date){
	// 把日期拆開
    list($month,$day,$year)=explode ('/',$date);
	$month_days =array(31,28,31,30,31,30,31,31,30,31,30,31);
	
	if ($month <1 || $month >12)
		return false;
	
	//年必須包含四位數字
	if ((strlen($year)!=4) || eregi("[^0-9]",$year))
		return false;
	
	//若是閏年,二月將有29天
	if (is_leap_year($year))
		$month_days [1] == 29;
	
	if ($day < 1 || $day > $month_days [$month-1] )
		return false;
	
	return true;
}
/2.22效能測試
$session_name = "<br>##2.22效能測試  ";
echo $session_name."<br>";

function get_microtime()
{
	$mtime = microtime();
	$mtime = explode(" ",$mtime);
	$mtime = doubleval($mtime[1 ])+doubleval($mtime[0 ]);
	return ($mtime);
}
$time1 = get_microtime();

for ($i=0; $i<99999; $i++){
	$ar []=$i;
}
$time2 = get_microtime();
$diff = abs ($time2-$time1);

print "<br>For 迴圈:$diff 秒<br>";

$i  =0;
unset ($ar);
$time1 = get_microtime();
while ($i<99999){
	$ar [] = $i;
	$i++;
}
$time2 = get_microtime();
$diff = abs ($time2-$time1);

print "<br>For 迴圈:$diff 秒<br>";

PHP-Cookbook-chapter1

程式

<?php
//1.1字串剖析 strpos()
$email = 'sterling@php.net';
$user_name = substr ($email,0,strpos($email,'@'));
echo $user_name."<br>";

//1.1字串剖析 unpack()
$str = "Gumbi and PDOC are smelly";
$names = unpack("A5name1/x5/A4name2", $str);
echo $names['name1']."<br>".$names['name2']."<br>";

//1.1字串剖析 unpack()
$str2 = 'A box without hinges, key, or lid, Yet golden treasure inside is hid';
$results = unpack ("A1pronoun/x5/A7adjective/X11/A3noun", $str2);
foreach($results as $key => $value){
      echo "{$key}: =>{$value} <br>";


 
}
//1.3交換變數  list()
$items = array ( "Linux",
		 "Apache",
		 "PHP",
		 "A SQL Server",
		 "Talented Administrator");
print "The essentials for operating your own webserver:\n";

reset ($items);
while (list (, $item) = each ($items)){
		print "$item\n";
}
//1.4將ASCII碼轉換為字元
$letter = chr(67);
$ascii_code = ord ($letter);
$letter = sprintf ("%c",$ascii_code);
echo "<br>{$letter}<br>";
//1.5劃分字元
function str_ord ($str){
	for ($i = 0; $i < strlen ($str); $i++){
	$ascii_values[$i] = ord ($str[$i]);
	}
    return $ascii_values;
}	

$str = "Hello World";
$ascii_values = str_ord ($str);
print "The third letter of \$str, a-> $str[2],";
print "has an ASCII value of $ascii_values[2].<br>";

$ascii_values = unpack ("C*char", $str);
//key char
$ascii_values2 = array_values (unpack("C*char", $str));
//轉換key 0,1...
foreach($ascii_values as $key => $value){
      echo "{$key}: =>{$value} <br>"; 
}
foreach($ascii_values2 as $key => $value){
      echo "{$key}: =>{$value} <br>";
}
//1.6 反轉部分字串 array_reverse是反轉單字字串  strrev是反轉字元
function word_reverse ($str){
	return implode ("",array_reverse (preg_split ("/\s+/",$str)));
}
$str = "A ross by any other name ";
print $str."<br>";

$str_reversed = word_reverse($str);
print $str_reversed."<br>";

$chart_reverse = strrev ($str);
print $chart_reverse."<br>";
//1.8 移除字串中的空白 chop 去除尾部空白 ltrim 去除開頭空白 trim 去除頭尾空白
$str = "red apple     " ;
$str = chop ($str);
echo $str."abc<br>";
$str = "   red apple     " ;
$str = ltrim ($str);
echo "abc".$str."abc<br>";
//1.11 解析URL
$session_name = "1.11 解析URL";
echo $session_name."<br>";

$url = 'http://www.php.net/search.php?show=nource&';
$url .='patter=parse_url&sourceurl=http%3A%2F%2Fwww.php.net%2F ';
$url_parts = parse_url ($url);
foreach ($url_parts as $key =>$value ){
	echo "{$key} => {$value} <br>";
}
//1.14 對字串加密
$session_name = "1.14 對字串加密  支援md5() base64_encode() base64_decode()";
echo $session_name."<br>"; 
/*  無法支援mcrypt
$key = "Sterling Hughes ";
$string = "Hello World" ;
$encrypted = mcrypt_ecb (MCRYPT_TripleDES, $key ,$string, mcrypt_encrypt);
$decrypted = mcrypt_ecb (MCRYPT_TripleDES, $key ,$string, mcrypt_decrypt);
echo $encrypted."<br>";
echo $decrypted."<br>";
*/
/*
$key = pack('H*', "bcb04b7e103a0cd8b54763051cef08bc55abe029fdebae5e1d417e2ffb2a00a3");
$key_size = strlen($key);
echo "key size: ".$key_size."<br>";
$string = "Hello World" ;
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
$iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
$ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
                                 $string, MCRYPT_MODE_CBC, $iv);
$ciphertext = $iv . $ciphertext;
$ciphertext_base64 = base64_encode($ciphertext);
echo  $ciphertext_base64 . "\n";
*/
$data = "Thanks for this idea Zak!";
$hashed_data = md5 ($data);
print "The md5 hash of $data is $hashed_data ";

$data = "Hello World";
$hashed_data = md5 ($data);
print "The md5 hash of $data is $hashed_data <br> ";

$base63_data = base64_encode ($data);
print "The base64_encode hash of $data is $base63_data <br> ";

$decode_data = base64_decode($base63_data);
print "The base64_decode hash of $base63_data is $decode_data <br> ";