(小白)PHP基础学习00420201005

    科技2022-08-06  92

    (小白)PHP基础学习004 20201005

    历程

    单引号和双引号的区别 <?php $str1='abc\r\ndef\t\'\"\$fg'; $str2="abc\r\ndef\t\'\"\$fg"; echo "01:",$str1,"\r"; echo "02:",$str2,"\r"; ?>

    结果:

    01:abc\r\ndef\t'\"\$fg 02:abc def \'"$fg

    这里可以看出,单引号里只有’被转成了’,其它都没有识别 而在双引号里:只有’没有被识别,其它都被识别了

    双引号中因为能识别$符号,所以双引号中可以解析变量,而单引号不可以 <?php $a="hello world!"; echo "I can say $a\n"; echo 'I can say $a\n'; ?>

    结果:

    I can say hello world! I can say $a\n

    有时候我们希望把$a的值和其它字符串连在一起,但又希望电脑能识别,所以我们使用变量的专业识别符:{区分}

    <?php $a="hello world!"; echo "I can say {$a}!!\n"; ?>

    结果:

    I can say hello world!!!

    结构化定义字符串 边界符EOD的补充: 1、上边界符EOD后面不能加任何内容,哪怕是//注释 2、下边界符必须顶格:最左边 3、下边界同样后面只能跟分号,不能跟任何内容。

    字符串长度 strlen()

    <?php $str1="abcd"; $str2="你好中国123"; echo strlen($str1),"\n",strlen($str2); ?> 4 15

    可以发现一个中文占了3个字符

    多字节字符串扩展模块:mbstring扩展(mb:Multi Bytes) 首先加载mbstring文件 在ini配置文件中取消注册extesion=php_mbstring <?php $str1="abcd"; $str2="你好中国123"; echo strlen($str1),";",strlen($str2),"\n"; echo mb_strlen($str1),";",mb_strlen($str2),"\n"; echo mb_strlen($str1,'utf-8'),";",mb_strlen($str2,'utf-8'),"\n"; ?> 4;15 4;7 4;7

    这样就可以对中文进行字符的统计

    字符串相关函数: 转换函数:implode(),explode(),str_split() implode([连接方式],数组):将数组中的元素按某个规则连接成字符串 explode(分割字符,目标字符串) str_split(字符串,字符长度)分离,按指定长度进行拆分 <?php $arr1=[1,2,3,4]; echo implode($arr1),"\n"; echo implode("~",$arr1),"\n"; $str1="ab~cde~fg"; var_dump(explode("~",$str1)); echo "\n"; var_dump(str_split($str1,2)); ?> 1234 1~2~3~4 array(3) { [0]=> string(2) "ab" [1]=> string(3) "cde" [2]=> string(2) "fg" } array(5) { [0]=> string(2) "ab" [1]=> string(2) "~c" [2]=> string(2) "de" [3]=> string(2) "~f" [4]=> string(1) "g" } 截取函数:trim(),ltrim(),rtrim() Trim():去除两边的空格,但是也可以指定要去除的内容(两边的,直到碰到一个不是目标字符为止) ltrim:去除左边的 rtrim:去除右边的 <?php $str1=" aaaabbb cccaaabbbcccddbbbaaa "; $str2="aaaabbb cccaaabbbcccddbbbaaa"; var_dump(trim($str1)); echo "\n"; var_dump(trim($str2)); echo "\n"; var_dump(ltrim($str1)); echo "\n"; var_dump(rtrim($str1)); echo "\n"; var_dump(trim($str2,"a")); echo "\n"; ?> string(29) "aaaabbb cccaaabbbcccddbbbaaa" string(29) "aaaabbb cccaaabbbcccddbbbaaa" string(33) "aaaabbb cccaaabbbcccddbbbaaa " string(32) " aaaabbb cccaaabbbcccddbbbaaa" string(22) "bbb cccaaabbbcccddbbb" 截取函数:substr(),strstr() substr(位置,长度):指定位置开始截取,可以指定截取长度,如果不截取就到末尾 strstr():从匹配的位置开始截取到最后 <?php $str="aaaabbb cccaaabbbccccddbbbaaa"; echo substr($str,3,7),"\n"; echo strstr($str,"cccc"); ?> abbb c ccccddbbbaaa 大小转换函数:strtolower(),strtoupper(),ucfirst() 全部小写,全部大写,首字母大写 <?php $str=" a bcD EFg hi"; echo strtoupper($str),"\n"; echo strtolower($str),"\n"; echo ucfirst($str),"\n"; ?> A BCD EFG HI a bcd efg hi a bcD EFg hi 这里最后一个首字母是空格,所以a不会大写 查找函数:strpos(),strrpos() strpos():判断在目标字符串中出现的位置 strrpos():判断在目标字符串中最后出现的位置 <?php $a="abcabcabc"; echo strpos($a,"b"),"\n"; echo strrpos($a,"b"),"\n"; ?> 1 7 替换函数:str_replace() <?php $a="abcabcabc"; echo str_replace("b","B",$a),"\n"; ?> aBcaBcaBc 格式化函数:printf(),sprintf() 以上两个是一样的 printf(输出字符串有点位符,顺序占位内容..):格式化输出数据 d%:十进制 s%:字符 <?php $age=50; $name="TOM"; printf("你好,今年我%d岁,我叫%s",$age,$name); ?> 这里的%d和%s分别对应第一位和第二位。 其它:str_repeat(),str_shuffle() str_repeat():重复某个字符串n次 str_shuffle():随机打乱某个字符串 <?php $name="TOM"; echo str_repeat($name,5),"\n"; echo str_shuffle($name); ?> TOMTOMTOMTOMTOM OMT 定义数组: <?php //使用array关键字 $a=array(1,2,3); var_dump($a); //用中括号来包裹数据 $b=[4,5,6]; var_dump($b); //隐形定义数组:给变量加一个中括号,系统自动变成数组 $c[2]=7; var_dump($c); //无key定义数组 $d[]=8; var_dump($d); //str key定义数组 $e["key"]=9; var_dump($e); ?> array(3) { [0]=> int(1) [1]=> int(2) [2]=> int(3) } array(3) { [0]=> int(4) [1]=> int(5) [2]=> int(6) } array(1) { [2]=> int(7) } array(1) { [0]=> int(8) } array(1) { ["key"]=> int(9) }

    感觉第一次见这么牛的array

    PHP的数组特点 如果数组下标都为整数:索引数组 如果数组下标都为字符串:关联数组 不同下标混合存在:混合数组 数组元素的顺序以放入顺序为准,跟下标无关 数字下标的自增长特性:从0开始自动增长,如果中间存在比较大的,那么从最大的往后增长; 特殊值下标的自动转换 <?php $arr[true]=true; $arr[false]=false; $arr[NULL]=NULL; $arr[]="END"; var_dump($arr) ?> array(4) { [1]=> bool(true) [0]=> bool(false) [""]=> NULL [2]=> string(3) "END" }

    php中数组元素没有类型限制,没有长度限制

    PHP中的数组是很大的数据,所以存储位置是堆区多维数组 <?php $info=array( array("name"=>"Jim","age"=>30), array("name"=>"Tom","age"=>28), array("name"=>"Lily","age"=>20) ); var_dump($info); ?> array(3) { [0]=> array(2) { ["name"]=> string(3) "Jim" ["age"]=> int(30) } [1]=> array(2) { ["name"]=> string(3) "Tom" ["age"]=> int(28) } [2]=> array(2) { ["name"]=> string(4) "Lily" ["age"]=> int(20) } } 数组遍历 foreach基本语法: foreach( 数 组 变 量 a s [ 数组变量 as [ as[下标=>])){ //通过 下 标 访 问 元 素 下 标 , 通 过 下标访问元素下标,通过 访值的访问元素的值 } 通常,如果关联数组(字母下标),就需要下标,如果是数字下标,就直接访问值 <?php $info=array(1,2,3,4,5,6,7); foreach($info as $v){ echo $v,"\n"; } echo "-------\n"; foreach($info as $k=>$v){ echo "key:",$k,"value:",$v,"\n"; } ?> 1 2 3 4 5 6 7 ------- key:0value:1 key:1value:2 key:2value:3 key:3value:4 key:4value:5 key:5value:6 key:6value:7 for循环遍历 <?php $arr=array(1,2,3,4,5,6,7,10); for($i=0;$i<count($arr);$i++){ echo "key is : ",$i,"value is :",$arr[$i],"\r"; } ?>

    结果:

    key is : 0value is :1 key is : 1value is :2 key is : 2value is :3 key is : 3value is :4 key is : 4value is :5 key is : 5value is :6 key is : 6value is :7 key is : 7value is :10 each 能够从一个数组中获取当前数组指针所指向的元素的下表和值,拿到之后将数组指针下移,同时将拿到的元素下标和值以四个元素的组合返回 0下标=》取得元素的下标值 1下标=》取得元素的值 key下标=》取得元素的下标值 value下标=》取得元素的值 <?php //while配合each和list遍历数组 $arr=array(1,"name"=>"Tom",3,"age"=>30); echo "001:\n"; print_r(each($arr)); echo "002:\n"; print_r(each($arr)); echo "003:\n"; print_r(each($arr)); echo "004:\n"; print_r(each($arr)); ?> 001: Array ( [1] => 1 [value] => 1 [0] => 0 [key] => 0 ) 002: Array ( [1] => Tom [value] => Tom [0] => name [key] => name ) 003: Array ( [1] => 3 [value] => 3 [0] => 1 [key] => 1 ) 004: Array ( [1] => 30 [value] => 30 [0] => age [key] => age )

    数字指针移动到最后(超出范围),会返回false

    list是一种结构,不是一种函数(没有返回值),是list提供一堆变量去从一个数组中取得元素值,然后依次存放到对应的变量当中(批量为变量赋值:值来源于数组):list必须从索引数组中去获取数据,而且必须从0开始。 <?php //while配合each和list遍历数组 $arr=array(1,2=>3); list($first,$second,$third)=$arr; var_dump($first);//对应下标0 var_dump($second);//对应下标1 因为我们第二个下标不是1,所以返回NULL var_dump($third);//对应下标2 ?> int(1) NULL int(3) list和each配合特别好 each一定有两个元素就是0和1下标元素 list(变量1,变量2)=each(数组): 是一种赋值运算,但是可以得到False结果(each取不到正确的结果),整个表达式为false <?php $arr=array(1,"name"=>"Tom",3,"age"=>30); while(list($key,$value)=each($arr)){ //list搭配each echo "key is : ".$key ." value is :".$value ."\n"; } ?> key is : 0 value is :1 key is : name value is :Tom key is : 1 value is :3 key is : age value is :30 数组的相关函数 按照ASCII码进行比较,可以进行英文比较 都是对原数组进行操作 <?php $arr=array(3,1,5,2,0); sort($arr); print_r($arr); ?> Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 5 )

    排序函数: sort():顺序排序,下标重排 rsort():逆序排序 arsort():顺序排序,下标不重排 ksort():按照key进行排序 krsort():按照key进行逆序 shuffle():随机打乱排序

    <?php $arr=array(3,"hi"=>1,"key"=>5,10=>2,0); echo "001:sort 正序\n"; $arrTemp=$arr; sort($arrTemp); print_r($arrTemp); echo "002:rsort 逆序\n"; $arrTemp=$arr; rsort($arrTemp); print_r($arrTemp); echo "003:asort 正序 下标不重组\n"; $arrTemp=$arr; asort($arrTemp); print_r($arrTemp); echo "004:arsort 逆序 下标不重组\n"; $arrTemp=$arr; arsort($arrTemp); print_r($arrTemp); echo "005:ksort 根据key排序\n"; $arrTemp=$arr; ksort($arrTemp); print_r($arrTemp); echo "006:krsort 根据key逆序\n"; $arrTemp=$arr; krsort($arrTemp); print_r($arrTemp); echo "007:shuffle 打乱排序\n"; $arrTemp=$arr; shuffle($arrTemp); print_r($arrTemp); ?> 001:sort 正序 Array ( [0] => 0 [1] => 1 [2] => 2 [3] => 3 [4] => 5 ) 002:rsort 逆序 Array ( [0] => 5 [1] => 3 [2] => 2 [3] => 1 [4] => 0 ) 003:asort 正序 下标不重组 Array ( [11] => 0 [hi] => 1 [10] => 2 [0] => 3 [key] => 5 ) 004:arsort 逆序 下标不重组 Array ( [key] => 5 [0] => 3 [10] => 2 [hi] => 1 [11] => 0 ) 005:ksort 根据key排序 Array ( [0] => 3 [hi] => 1 [key] => 5 [10] => 2 [11] => 0 ) 006:krsort 根据key逆序 Array ( [11] => 0 [10] => 2 [0] => 3 [key] => 5 [hi] => 1 ) 007:shuffle 打乱排序 Array ( [0] => 3 [1] => 1 [2] => 0 [3] => 2 [4] => 5 )

    指针函数: reset():重置指针,将数组指针回到首位 end():重置指针,将数组指针指到最后一个值 next():指针下移,取得下一个元素的值 prev():指针上移,取得上一个元素的值 current():获取当前指针对应的元素值 key():获取当前指针对应的下标值

    <?php $arr=array(3,"hi"=>1,"key"=>5,10=>2,0); echo "001:\n"; echo key($arr),"\n"; echo current($arr),"\n"; echo "002:\n"; next($arr); echo key($arr),"\n"; echo current($arr),"\n"; echo "003:\n"; end($arr); echo key($arr),"\n"; echo current($arr),"\n"; echo "004:\n"; prev($arr); echo key($arr),"\n"; echo current($arr),"\n"; echo "005:\n"; reset($arr); echo key($arr),"\n"; echo current($arr),"\n"; ?> 001: 0 3 002: hi 1 003: 11 0 004: 10 2 005: 0 3

    其他函数: count():获取数组的数量 array_push():从数组中加入一个元素,后面 array_shift():从前面取出一个元素 array_pop():从后面取出一个元素 array_unshift():从数组中加入一个元素,前面 array_reverse():数组元素反过来 in_array():判断一个元素在数组中是否存在 array_keys():获取一个数组的所有下标,返回一个数组 array_values():返回所有值得数组

    <?php $arr=array(3,"hi"=>1,"key"=>5,10=>2,0); var_dump(in_array(3,$arr)); var_dump(in_array("hi",$arr)); var_dump(in_array("hello",$arr)); var_dump(in_array("abcdefghijk",$arr)); var_dump(in_array(100,$arr)); ?> bool(true) bool(true) bool(true) bool(true) bool(false)

    这里没明白的是,为什么我输入任意英文,都返回true

    栈(先进后出FILO)和队列(先进先出FIFO)
    Processed: 0.019, SQL: 8