变量与类型扩展(数组)
1、定义数组的方式(示例)
- $ num=array(1,2,3)
- $a=array(key1=>value1,key2=>value2,key3=>value3);
- $a = array();
$a[1] = 1;
$a[0] = 0;
2、查看数组输出结果
print_r()以易读的形式显示变量信息
其中的一个参数return
想要获取 print_r() 输出的内容,使用 return 参数,此时应为FALSE,
当此参数为 TRUE,print_r() 会直接返回信息,而不是输出。
var_dump()此函数显示关于一个或多个表达式的结构信息,包括表达式的类型与值。数组将递归展开值,通过缩进显示其结构,无返回值
$a=array(1,2.3,array("a","b","c","d"));
var_dump($a);
输出:
3、foreach对数组遍历
foreach 仅能够应用于数组和对象,如果尝试应用于其他数据类型的变量,或者未初始化的变量将发出错误信息。
语法:
以上两种语法形式均是对所给的数组进行遍历,赋值之后内部指针向前移一步,只是第二种在当前数组单元的值会被赋给
v
a
l
u
e
的
情
况
下
再
加
上
键
值
也
会
被
赋
给
k
e
y
。
f
o
r
e
a
c
h
不
支
持
用
“
@
”
来
抑
制
错
误
信
息
的
能
力
。
(
@
:
容
错
符
,
也
就
是
可
以
忽
略
该
语
句
的
语
法
错
误
)
若
对
数
组
元
素
进
行
修
改
,
可
在
value的情况下再加上键值也会被赋给key。 foreach 不支持用“@”来抑制错误信息的能力。 (@:容错符,也就是可以忽略该语句的语法错误) 若对数组元素进行修改,可在
value的情况下再加上键值也会被赋给key。foreach不支持用“@”来抑制错误信息的能力。(@:容错符,也就是可以忽略该语句的语法错误)若对数组元素进行修改,可在value前面添加&
示例:
$arr = array(0, 1, 2, 3);
foreach ($arr as &$value) {
$value = $value * 2;}//当前$arr=array(0,2,4,6)
数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留,可使用 unset() 销毁。
unset($value)//取消掉引用
4、数组指针相关函数
current():返回数组中的当前单元 (pos是它的别名)
current(array &$array):mixed
其中array就是这个数组,
mixed (为伪类型,它只是 PHP 文档里用于指示参数可以使用的类型和值) 说明一个参数可以接受多种不同的(但不一定是所有的)类型。
例如 gettype() 可以接受所有的 PHP 类型,str_replace() 可以接受字符串和数组。
each():返回数组中当前的键/值对并将数组指针向前移动一步。
each ( array &$array ) : array
在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()(reset() 将 array 的内部指针倒回到第一个单元并返回第一个数组单元的值)。 键值对被返回为四个单元的数组,键名为0,1,key和 value。单元 0 和 key 包含有数组单元的键名,1 和 value 包含有数据。
如果内部指针越过了数组的末端,则 each() 返回 FALSE。
不过该函数在php7.2被弃用,可参照each()函数的代替写法。
end():将 array 的内部指针移动到最后一个单元并返回其值。
end ( array &$array ) : mixed
其中的array这个数组。 该数组是通过引用传递的,因为它会被这个函数修改。 这意味着你必须传入一个真正的变量,而不是函数返回的数组,因为只有真正的变量才能以引用传递。 (这句话还需要理解。。。。)
返回值会返回最后一个元素的值,如果是空数组则返回 FALSE。
next():将数组中内部指针向前移动一位
next ( array &$array ) : mixed
next在返回值之前将内部指针向前移动一位,它返回的是下一个数组单元的值并将数组指针向前移动了一位。
当没有更多单元时返回 FALSE。或返回等同于FALSE的值(如:整型值 0,浮点型0.0,空字符串,字符串"0’,不包含任何元素的数组,NULL)
prev():将数组的内部指针倒回一位
prev ( array &$array ) : mixed
返回值规律同next
示例:
(首先为nana 然后为kk 然后dd 最后kk)
输出为 kk
5、此外还包含很多其他与数组相关函数,仍需学习(参考手册)
正则表达式
正则表达式就是在执行搜索时的格式,由一些字母和数字组合而成。
可以参考:https://github.com/ziishaned/learn-regex
1、语法
限定符:用来指定正则表达式的一个给定组件必须要出现多少次才能满足匹配。
定位符:能够将正则表达式固定到行首或行尾,还可以创建出现在一个单词内、在一个单词的开头或者一个单词的结尾的正则表达式。
预定义字符:
. : 除换行符以外的所有字符
\w :匹配所有字母数字,等同于[a-zA-Z0-9]
\W:匹配所有非字母数字,等同于[^\w]
\d :匹配数字 [0-9]
\D:匹配非数字 [^\d}]
\s:匹配所有空格字符 [\t\n\f\r\p{z}]
\S:匹配所有非空格字符 [^\s]
\f :匹配换页符
\n:匹配换行符
\r:匹配回车符
\t: 匹配制表符
\v:匹配垂直制表符
\p:匹配CR/LF(等同于\r\n),用来匹配DOS行终止符
模式修饰符:
2、两个函数
preg_match()
用于执行一个正则表达式匹配。
语法:(搜索 subject 与 pattern 给定的正则表达式的一个匹配。)
int preg_match ( string $pattern , string $subject [, array &$matches [, int $flags = 0 [, int $offset = 0 ]]] )
对手册中的例子进行分析
<?php
preg_match('@^(?:http://)?([^/]+)@i',"http://www.php.net/index.html", $matches);
$host=$matches[1];// 我的理解是变量host=www.php.net
pre_match('/[^.]\.[^.]+$/',$host,$matches);
echo "domain name is: {$matches[0]}\n";
?>
输出 domain name is: php.net
preg_replace()
执行一个正则表达式的搜索和替换。
语法
mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 [, int &$count ]] )
返回值:
如果 subject 是一个数组, preg_replace() 返回一个数组, 其他情况下返回一个字符串。
如果匹配被查找到,替换后的 subject 被返回,其他情况返回没有改变的 subject。如果发生错误,返回 NULL。
实现了对google的替换
匹配到空格后对将它替换为o
匹配到空格然后删除空格