(小白)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)