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> ";

三元運算子

你想為變數設定預設值,並且可根據使用者輸入而改變

$file_name = isset ($argv[1]) ? $argv[1] : "php://stdin";

相同

if (isset ($argv[1])){
   $file_name = $argv[1];
} else {
   $file_name = "php//stdin";
}

語法如下

條件?執行(若結果為真):執行(若結果為假)

也可以改寫為

$file_name = $argv[1] or $file_name = "php://stdin";

php +0

php 數字加上一個0會變成?

今天學習一組程式碼,一直納悶著為何sairwolf要加一個數字0,有甚麼用處呢?
原來,加數字零之後,取出的兩位數會變成一位數,當若是要取出兩位數,而需要是個位數時。
如:取出數是09,但是我要9時,加個數字0就會變成9。但是你會說:那不就取1位就好,但是常常是也需要2位數的。
<?php
$or_num="20045";
$count_num=substr($or_num,2,2);
echo $count_num."<br>";
$count_num +=0;
echo $count_num."<br>";

?>

結果

04
4

PHP isset() empty() is_null() 的區別

它們的區別   出處

三個方法都是來判斷是否是空值或有沒有宣告變數的方法,比較容易混淆的是isset(),empty()。

  • isset()檢查變數是否存在
  • empty()檢查變數的值是否為空
  • is_null()檢查變數是否為null
gettype()isset()empty()is_null()
$x is undefinedNULLFALSETRUETRUE
$x = null;NULLFALSETRUETRUE
$x = 0;integerTRUETRUEFALSE
$x = “0”;stringTRUETRUEFALSE
$x = 1;intergerTRUEFALSEFALSE
$x = “”;stringTRUETRUEFALSE
$x = “PHP”;stringTRUEFALSEFALSE

intval

intval  函數

(PHP 4, PHP 5, PHP 7, PHP 8)

intval — 獲取變數的整数值

說明

intval(mixed $value, int $base = 10): int

通过使用指定的进制 base 转换(默认是十进制),返回变量 value 的 int 数值。 intval() 不能用于 object,否则会产生 E_WARNING 錯誤並返回 1。

範例

<?php
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);                    // 10000000000
echo intval('1e10');                  // 10000000000
echo intval(0x1A);                    // 26
echo intval('0x1A');                  // 0
echo intval('0x1A', 0);               // 26
echo intval(42000000);                // 42000000
echo intval(420000000000000000000);   // -4275113695319687168
echo intval('420000000000000000000'); // 9223372036854775807
echo intval(42, 8);                   // 42
echo intval('42', 8);                 // 34
echo intval(array());                 // 0
echo intval(array('foo', 'bar'));     // 1
echo intval(false);                   // 0
echo intval(true);                    // 1
?>

ord

ord   函數

(PHP 4, PHP 5, PHP 7, PHP 8)

ord — 轉換字符串第一个字节为 0-255 之间的值

说明

ord(string $character): int

解析 character 二进制值第一个字节为 0 到 255 范围的无符号整型类型。

如果字符串是 ASCII、 ISO-8859、Windows 1252之类单字节编码,就等于返回该字符在字符集编码表中的位置。 但请注意,本函数不会去检测字符串的编码,尤其是不会识别类似 UTF-8 或 UTF-16 这种多字节字符的 Unicode 代码点(code point)。

该函数是 chr() 的互补函数。

範例:

<?php
declare(encoding='UTF-8');
$str = "?";
for ( $pos=0; $pos < strlen($str); $pos ++ ) {
 $byte = substr($str, $pos);
 echo 'Byte ' . $pos . ' of $str has value ' . ord($byte) . PHP_EOL;
}
?>

輸出:

Byte 0 of $str has value 240
Byte 1 of $str has value 159
Byte 2 of $str has value 144
Byte 3 of $str has value 152

PHP_正規表達式

正規表達式
開頭結尾:
^:比對字串的開始位置
$:比對字串的結束位置

指定匹配次數

*:比對前一個字元0次或以上
+:比對前一個字元1次或以上
?:比對前一個字元0次或1次以上
{數字}:比對前一個字母N次(n是整數數字),ex:/{3}/,意思比對字串aaapple,中的aaa3次,可是無法比對aa,因為已經指定3次,所以只能3次。
{,數字}:比對N次以下(N是整數)
{數字,}:比對前一個字母"至少"N次(N是整數數字),ex:/{3,}/,意思可比對aaa aaaapple,中的aaaa aaa3次,只能比對該字母3次或以上。
{數字1,數字2}:比對前字母N~M次(N跟M是整數),ex:/{3,4}/,意思可比對aaa aa aaaa apple,中的aaa aaaa符合,aa apple都不符合,只能比對a 3到4次,其他多的或少的,都無法比對。

特殊符號:

\:反斜線,避開特殊字元
.:比對任何次元

特定字元:

[字母或數字]:比對括號中出現的"任何"字元,只要一個不符合就false。
    ex:[A-Z]比對大寫英文字母A-Z,反之小寫[a-z]則是比對小寫字母,[0-9]比對數字。
[^字母或數字]:比對括號內以外的字元,也就是不要比括號裡出現的字母或數字。
    ex:/[^le],表示字串中apple中,不要比對le,指比對a,p,p
/字母/:比對字串內是否含有該字母。
    ex:/m/,就是比對該字串是否含有m字母。
/字母A字母B/:比對A或B。ex:/ab/,比對字串內是否有a或b。

其他:

\b:比對英文邊界,如空格
\d:比對任一數字,如[0-9]
\D:比對任何非數字,如[^0-9]
\w:比對數字字母跟底線,如[A-Za-z0-9_]
\W:比對非數字字母跟底線,[^A-Za-Z0-9_]
\s:比對任一空白字元
\S:比對任一非空白次元
\n:比對換行符號,是否換行
\t:比對定位字元

範例:

[^A-Za-z0-9]          代表接受英文大小寫及數字以外的字串

[0-9A-Za-z]           代表英文大小寫及數字的字串

[^0-9]          代表數字以外的字串

[0-9]          代表數字的字串

[A-Za-z]            代表英文大小寫的字串

[A-Za-z0-9_]           代表大小寫英數及符號的字串

[^A-Z]           代表大寫英文字母以外的字串

[A-Z]          代表大寫英文字母的字串

{3,7}           代表三個至七個字元的字串

{5,}          代表五個以上的字串

^[A-C]{3}            開頭是大寫的英文字母且在A-C間,且有三個字元的字串    20241015