【php】基础学习1

  其中包括php基础、字符串和正则表达式的学习。具体如下:

 <html xmlns=http://www.w3.org/1999/xhtml>
<head>
<meta http-equiv=Content-Type content="text/html;charset=utf-8">
</head>
<body>
<h1>
<?php
/**
* php输出语句:echo
* 可以同时输出多个字符串,可以多个参数,并不需要圆括号,无返回值。
* void echo ( string arg1 [, string ...] ) //返回值为空
*/
echo "my first php demo!"; //echo输出
echo "<br/>";
echo 'my',' first',' php',' demo','!<br>'; /**
* php输出函数print
* print() 和 echo() 用法一样,但是echo速度会比print快一点点。
* 实际上它也不是一个函数,因此您无需对其使用括号。不过,如果您希望向print() 传递一个以上的参数,那么使用括号会发生解析错误。
*/
print "hello<br>";
print ("hello<br>");
//print 'a','b','c'; ERROR这个是错误的
?>
</h1>
<h2>
<?php
$temp1="tem1"; //值赋值
$temp2="tem2";
$temp2=&$temp1; //引用赋值
$temp1="woshi1";
$temp2="woshi2";
/**
* php中的换行
* ①\n只是源代码下的换行,而不是显示的效果,\n是在HTML源代码下可以看到换行;
* ②PHP与C语言不同,PHP处理后给的对象是客户端的浏览器,而浏览器的换行是<br>标记;
* ④\n是输出到文本文件时用到的换行,而要在浏览器中显示换行要用<br>或别的HTML标记;
*/
echo $temp2."<br/>"; //php总换行可以用这种方式
echo "huanghang\n"; //浏览器显示端并不换行 /**
* 超级全局变量:$GLOBALS,$_SERVER,$_SESSION,$_COOKIE,$_POST,$_GET,$_REQUEST
*/
echo $GLOBALS."<br/>";
echo $_SERVER."<br/>";
echo $_COOKIE."<br/>"; /**
* 常量,php使用函数define来定义函数:boolean define(string name,mixed value[,bool case_insensitive]),返回值为1
*/
$res=define("PI",3.141592);
echo $res."<br>";
$Pi2=PI*2;
echo $Pi2."<br/>";
printf("pi * 2 = %f",$Pi2);
echo "<br>"; /**
* php中的双引号与单引号
* ①PHP允许我们在双引号串中直接包含字串变量
* ②单引号串和双引号串在PHP中的处理是不相同的。双引号串中的内容可以被解释而且替换,而单引号串中的内容总被认为是普通字符。
*/
$color = "red";
echo "Roses are $color"."<br>"; //双引号里的$color代表变量
echo 'Roses are $color'."<br>"; //单引号里的$color代表字符串
$s = "I am a 'single quote string' inside a double quote string"."<br>";
echo $s;//双引号里嵌套单引号
$s1 = 'I am a double quote string" inside a single quote string'."<br>";
echo $s1;//单引号里嵌套双引号
//$s2 = "I am a "double quote string" inside a single quote string";——————ERROR双引号里不能嵌套双引号
//$s2 = 'I am a 'double quote string' inside a single quote string';——————ERROR单引号里不能嵌套单引号
$s3="I am a \"double quote string\" inside a single quote string"."<br>";
echo $s3;//如果在这个串中想要表示出双引号,则可以使用转义符"\"(反斜线)
$s3='I am a \'double quote string\' inside a single quote string'."<br>";
echo $s3;//如果在这个串中想要表示出单引号,则可以使用转义符"\"(反斜线) /**
* 字符串和整型相加时,字符串会转换为整型。
*/
$a='5';
echo $a+5; /**
* 定界符
* 是另一种给字符串定界的方法使用定界符语法(“<<<”)。应该在 <<< 之后提供一个标识符,然后是字符串,然后是同样的标识符结束字符串。
* 注意:定界符的结尾一定要单独一行,而且要顶格写,前面不可以有空格。如下所示: $str="定界符的用法";
echo <<<mark
用定界符输出字符串\$str=$str<br>\n
一个反斜线\\ &nbsp;&nbsp;&nbsp;&nbsp;一个双引号\"
mark;
//为了展示定界符的便利,下面我们输出一个包含了javascript的代码:
$name = 'kitty';
echo <<<Eof
<table height="20">
<tr>
<td>
{$name}<br/>
<script>
var p='hello world';
document.writeln(p);
</script>
</td>
</tr>
</table>
Eof;
*/ /*
* php中substr
* 语法string substr ( string $string , int $start [, int $length ] )
* ①string为字符串,start为开始位置,length为截取长度;
* ②位置从0开始,当start为正数时从右向左截取;为负数时
*/
$rest1 = substr("abcdef", 0, 0); // returns ""
$rest2 = substr("abcdef", 0, 2); // returns "ab"
$rest3 = substr("abcdef", 0, -1); // returns "abcde"
$rest4 = substr("abcdef", 2,0); // returns ""
$rest5 = substr("abcdef", 2,2); // returns "cd"
$rest6 = substr("abcdef", 2, -1); // returns "cde"
$rest7 = substr("abcdef", -2,0); // returns ""
$rest8 = substr("abcdef", -2,2); // returns "ef"
$rest9 = substr("abcdef", -2,-1); // returns "e"
echo $rest1,",",$rest2,",",$rest3,",",$rest4,",",$rest5,",",$rest6,",",$rest7,",",$rest8,",",$rest9,"<br>";
echo ">";
echo substr("hello shopNC",-7,-3)."<br>"; /**
* php中的字符串拼接 "."
*/
$string1="hello ";
$string2="world!";
echo $string1.$string2."<br>";
echo "{$string1}{$string2}"."<br>";//注意这里只能有双引号
$string1.=$string2;
echo $string1."<br>"; /*
* printf()函数和sprintf()函数
* int printf(string $format[,mixed $arg1 [,mixed $arg2...])
* string sprintf(string $format[,mixed $arg1 [,mixed $arg2...])
* 其中format为制定要显示的字符串格式
* ①它们都可以对字符串执行格式化操作;
* ②printf可以将格式化后的字符串直接显示;
* ③sprintf则需要使用echo才可以将格式化后的字符串输出;
* %b二进制、%c以ASCII形式输出、%d整型,以有符号的形式输出
* %u整型,以无符号的形式输出、%o八进制、%x十六进制,字母部分为小写
* %X十六进制,字母部分为大写、%f浮点型、%s字符串
*/
$string="%b,%c,%d,%u,%o,%x,%X,%f,%s";
printf($string,33,33,-33,33,-33,33,-33,33,-33);
echo "<br/>\n";
echo sprintf($string,33,33,-33,33,-33,-33,-33,33,-33)."<br>"; /*
* nl2br()函数
* 该函数可以将字符串中的\n解释为HTML中的<br/>
*/
$string="hello world1!\nhello world2!";
echo nl2br($string)."<br>"; /*
* wordwrap()函数
* 可以让字符串在指定的位置强制换行,语法格式如下:
* string wordwrap(string $str [,int $width [, string $break [, bool $cut]]])
* str为要换行的字符串;width制定最大行宽度,默认为75;break制定作为分隔符的字符,默认为\n
* cut指定是否对大于指定宽度的单词进行换行,默认为false
*/
$string=" welcometoChina!";
echo ">";
echo wordwrap($string,8,"<br>",true); /*
* 修改字母大小写
* string strtolower(string $str)所有字母转成小写
* string strtoupper(string $str)所有字母转成大写
* string ucwords(string $str)所有首字母转为大写
*/
$string="welcome to China!";
echo "<br>".strtolower($string);
echo "<br>".strtoupper($string);
echo "<br>".ucwords($string); /*
* 计算字符串的长度strlen()函数
*/
$string="welcome to China!";
echo "<br>".$string."的长度是:".strlen($string); /*
* substr_count()函数来计算制定的字符串在某个字符串中出现的次数,语法格式为:
* int substr_count(string $haystack,string $needle [, int $offset [, int $lengh]])
*/
$string="welcome to China!welcome to Chinaaaa!";
$count=substr_count($string,"China");
echo "<br/>"."China在".$string."中出现的次数为:".$count; /*
* mixed str_word_count(string $string [, int $format [, string $charlist]])
* 返回字符串中单词的使用情况
* string为要检查的字符串,format指定返回模式,charlist规定被认定为单词的特殊字符
* 返回模式有三种:
* 0 默认值,返回找到的单词数目;
* 1 返回一个数组,其中,键名是以0开始的连续整数,值为实际单词
* 2 返回一个数组,其中,键名是单词在字符串中的首字母位置,值为实际单词
*/
$string="welcome to China!! , welcome to Chinaaaa!!!";
$count=str_word_count($string);
echo "<br>"."字符串".$string."*有".$count."个单词"."<br/>";
print_r(str_word_count($string,1));
echo "<br/>";
print_r(str_word_count($string,2));
echo "<br/>";
print_r(str_word_count($string,2,"!"));
echo "<br/>";
print_r(str_word_count($string,2,",")); /*
* 字符串查找函数strstr()
* 该函数用来查找指定字符串在某字符串中的位置,该函数返回的结果为字符串第一次出现后的所有内容
* string strstr(string $str,mixed $needle,bool $before_needle);
* str为输入的字符串;needle要查找的字符串
* before_needel默认值为false;若为true,则返回needle在haystack中的位置之前的部分
* ①该函数区分大小写。如果想要不区分大小写,请使用 stristr()。
* ②如果你仅仅想确定 needle 是否存在于 str 中,请使用速度更快、耗费内存更少的 strpos()函数。
*/
$email = 'name@example.com';
$domain = strstr($email, '@');
echo "<br/>".$domain."<br/>"; // 打印 @example.com
$user = strstr($email, '@', true); // 从 PHP 5.3.0 起
echo $user."<br/>"; // 打印 name /*
* strpos()函数用来查找指定字符串在被检查的字符串中第一次出现的位置
* string strpos(string $haystack,string $needle,in [ offset])
* ①strpos()也有与之对应的对大小写不敏感的函数stripos()
*/
$email = 'name@example.com';
echo strpos($email,"@",2)."<br/>";//4
//上例中如果偏移量为5,则输出空 /*
* str_repeat()函数
* string str_repeat ( string $input , int $multiplier )
* 返回input重复multiplier次数的结果
*/
echo str_repeat("hello world!",3)."<br/>";//hello world!hello world!hello world! /*
* 字符串替换函数substr_replace()
* mixed substr_replace ( mixed $string , mixed $replacement , mixed $start [, mixed $length ] )
* string指定要检查的字符串;replacement指定要插入的字符串;start指定在字符串中开始替换的位置;
* length指定要替换的字符数,对length的几点解释:
* ①length如果不指定,默认长度为strlen($string);
* ②length为0,将replacement 插入到 string 的 start 位置处。
* ③length为正值,表示 string 中被替换的子字符串的长度
* ④length为负值,表示从字符串尾部开始到第|length|个字符停止替换
*/
$string="hello world!";
echo substr_replace($string,"China",6)."<br/>";//hello China
echo substr_replace($string,"China",6,0)."<br/>";//hello Chinaworld!
echo substr_replace($string,"China",6,2)."<br/>";//hello Chinarld!
echo substr_replace($string,"China",6,-2)."<br/>";//hello Chinad! /*
* 字符串比较:
* ① "=="可以用来比较两个字符串是否相等;
* ② srcmp()用来比较两个字符串的大小(区分大小写)
* ② srcmp()用来比较两个字符串的大小(区分大小写)
int strcmp(string $str1,string $str2);
返回值为整数,返回负数则表示str1小于str2,返回正数则表示str1大于str2,返回0则表示两者相等
该函数区别大小写
* ③ strcasecmp()二进制安全比较字符串(不区分大小写)
strcasecmp()与strcmp()函数基本相同,只是strcasecamp()函数不区分大小写
int strcasecmp ( string $str1 , string $str2 )
* ④ strnetcmp()是将字符串按自然排序法进行比较
int strnatcmp ( string $str1 , string $str2 )
该函数实现了以人类习惯对数字型字符串进行排序的比较算法,这就是“自然顺序”。注意该比较区分大小写。
*/
$str1="hello aorld!";
$str2="hello China!";
echo strcmp($str1,$str2)."<br/>";//
echo strcasecmp($str1,$str2)."<br/>";//-2
//strnetcmp()用法
$arr1 = $arr2 = array("img12.png", "img10.png", "img2.png", "img1.png");
echo "Standard string comparison\n";
usort($arr1, "strcmp");
print_r($arr1);
echo "<br>\nNatural order string comparison\n";
usort($arr2, "strnatcmp");
print_r($arr2); /*
* 正则表达式
* ?与{0,1}等价;*与{0,}等价;+与{1,}等价
*/ /*
* 使用正则表达式查找字符串 ,使用函数preg_match
* 还有已经被废弃的两个函数是erge()和eregi(),它们完全相同只是eregi不区分大小写。
* int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
* ① pattern为要搜索的模式;subject为字符串;
* ② 如果提供了参数matches,它将被填充为搜索结果:$matches[0]将包含完整的模式匹配到的文本,matches[1]将包含第一个捕获子组匹配到的文本,以此类推;
* ③ flags可以被设置一下标记值:PREG_OFFSET_CAPTURE,如果传递了这个标记,对于每一个出现的匹配返回时会附加字符串偏移量(相对于目标字符串的)。
* 注意:这会改变填充到matches参数的数组,使其每个元素成为一个由第0个元素是匹配到的字符串,第一个元素是该匹配字符串在目标字符串subject中的偏移量。
* ④ 可选参数offset用于指定从目标字符串的某个位置开始搜索。
*/
//
$subject = "abcdef";
$pattern = '/^def/';
preg_match($pattern, $subject, $matches, PREG_OFFSET_CAPTURE, 3);
echo "<br/>";
print_r($matches);//Array()
//2
$subject = "abcdef";
$pattern = '/^def/';
echo "<br/>".substr($subject,3)."<br/>";//Array()
preg_match($pattern, substr($subject,3), $matches, PREG_OFFSET_CAPTURE);
print_r($matches);//输出结果Array ( [0] => Array ( [0] => def [1] => 0 ) )
//检查电子邮件
$email="_.-~kifeandfork_@164.com";
echo "<br/>";
if(preg_match("/^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$/",$email)){
echo "your email's format is right!";
}else{
echo "your email's format is wrong!";
} /*
* 字符串分割函数:正则表达式函数preg_split()
* array preg_split ( string $pattern , string $subject [, int $limit = -1 [, int $flags = 0 ]] )
* pattern用于搜索的模式;subject输入的字符串;
* ① limit 如果指定,将限制分割得到的字串最多只有limit个,返回的最优一个字串将包含所有的剩余部分。
limit的值为-1,0,null时都代表不限制。
* ② flags 可以去如下值:
PREG_SPLIT_NO_EMPTY,此时函数将会返回分割后的非空部分;
PREG_SPLIT_DELIM_CAPTURE,此时用分割的模式中的括号表达式将被捕获并返回;
PREG_SPLIT_OFFSET_CAPTURE ,此时对于每一个出现的匹配返回时将会附加字符串偏移量
*/
//1 使用逗号或空格(包含" ", \r, \t, \n, \f)分隔短语
$keywords = preg_split("/[\s,]+/", "hypertext language, programming");
echo "<br/>";
print_r($keywords);//输出Array ( [0] => hypertext [1] => language [2] => programming )
//2 将一个字符串分隔为组成它的字符
$str = 'string';
$chars = preg_split('//', $str, -1, PREG_SPLIT_NO_EMPTY);
echo "<br/>";
print_r($chars);
//3 分隔一个字符串并获取每部分的偏移量
$str = 'hypertext language programming';
$chars = preg_split('/ /', $str, -1, PREG_SPLIT_OFFSET_CAPTURE);
echo "<br/>";
print_r($chars); /*
* 字符串分割函数:
* 如果你不需要正则表达式功能,可以有更快(并且更简单)的选择比如 explode() 或 str_split()。
* ① array explode ( string $delimiter , string $string [, int $limit ] )
* delimiter为边界上的分割字符;string为输入的字符串;
如果设置了limit参数并且是整数,则返回的数组包含最多limit个元素,而最后那个元素将包含string的剩余部分;
如果limit为负数,则返回除了最后的-limit个元素外的所有元素
如果limit为0,则会被当做1
* ② array str_split ( string $string [, int $split_length = 1 ] )
*/
//1 函数explode()
$str = 'one|two|three|four';
echo "<br/>";
print_r(explode('|', $str, 2));//返回Array ( [0] => one [1] => two|three|four )
echo "<br/>";
print_r(explode('|', $str, -1));//返回Array ( [0] => one [1] => two [2] => three )
echo "<br/>";
print_r(explode('|', $str, 0));//Array ( [0] => one|two|three|four )
//2 函数str_split()
$str = "Hello Friend";
$arr1 = str_split($str);
$arr2 = str_split($str, 3);
echo "<br/>";
print_r($arr1);
echo "<br/>";
print_r($arr2);
?>
</h2>
</body>
</html>
上一篇:11.枚举类.md


下一篇:浅谈 举家搬迁静态文件到CDN