################################PHP###################################
一、 数学函数
1.abs(): 求绝对值 求绝对值
$abs = abs(-4.2);
输入:任意数字
输出结果:4.2(数字绝对值数字)

2.ceil(): 进一法取整 进一法取整
echo ceil(9.999);
输入:任意数字
输出结果:10(浮点数进一取整)

3.floor(): 舍去法取整 舍去法取整
echo floor(9.999);
输入:任意数字
输出结果:9(浮点数直接舍去小数部分)

4.fmod(): 浮点数取余 浮点数取余
$x = 5.7;
$y = 1.3; // 两个浮点数,x>y 浮点余数
r = f m o d ( r = fmod( r=fmod(x, $y);
输出结果:0.5(5.7/1.3=4···0.5)

5.pow(): 返回数的 n 次方 次方
echo pow(-1, 20);
输出结果:1(基础数|n 次方乘方值)

6.round(): 浮点数四舍五入 浮点数四舍五入
echo round(1.95583, 2);
输出结果:1.96(一个数值|保留小数点后多少位,默认为 0 舍入后的结果)

7.sqrt(): 求平方根 求平方根
echo sqrt(9);
输出结果:3(被开方的数平方根)

8.max(): 求最大值 求最大值
echo max(1, 3, 5, 6, 7);
输入: 多个数字或数组
输出结果:7(返回其中的最大值)

9.min(): 求最小值 求最小值
echo min(1, 3, 5, 6, 7);
输入: 多个数字或数组
输出结果:1(返回其中的最小值)

10.mt_rand(): 更好的随机数 更好的随机数
echo mt_rand(0,9);
输入: 最小|最大,
输出: 随机数随机返回范围内的值

11.rand(): 随机数 随机数
echo rand(0,9);
输入: 最小|最大,
输出: 随机数随机返回范围内的值

12.pi(): 获取圆周率值 获取圆周率值
echo pi();
输出结果:3.1415926535898…

二、 去空格或或其他字符: :
13.trim(): 删除字符串两端的空格或其他预定义字符 删除字符串两端的空格或其他预定义字符
KaTeX parse error: Can't use function '\r' in math mode at position 8: str = "\̲r̲\nHello World!\…str);
输入: 目标字符串
输出结果:Hello World!(清除后的字符串)

14.rtrim(): 删除字符串右边的空格或其他预定义字符 删除字符串右边的空格或其他预定义字符
KaTeX parse error: Undefined control sequence: \n at position 19: …=”Hello World !\̲n̲\n”; echo rtrim…str);
输入: 目标字符串
输出结果:Hello World!(清除后的字符串)

15.chop(): rtrim()的别名 的别名

16.ltrim(): 删除字符串左边的空格或其他预定义字符 删除字符串左边的空格或其他预定义字符
KaTeX parse error: Can't use function '\r' in math mode at position 8: str = "\̲r̲\nHello World!"…str);
输入: 目标字符串
输出结果:Hello World!(清除后的字符串)

17.dirname(): 返回路径中的目录部分 返回路径中的目录部分
echo dirname(“c:/testweb/home.php”);
输入: 一个包含路径的字符串
输出结果:C:/testweb(返回文件路径的目录部分)

三、 字符串生成与转化
18.str_pad(): 把字符串填充为指定的长度 把字符串填充为指定的长度
s t r = " H e l l o W o r l d " ; e c h o s t r p a d ( str = "Hello World"; echo str_pad( str="HelloWorld";echostrp​ad(str,20,".");
输入: 要填充的字符串|新字符串的长度|供填充使用的字符串, 默认是空白
输出结果: Hello World…(完成后的字符串)

19.str_repeat(): 重复使用指定字符串 重复使用指定字符串
echo str_repeat(".",13);
输入:要重复的字符串|字符串将被重复的次数
输出结果:… (13 个点)

20.str_split(): 把字符串分割到数组中 把字符串分割到数组中
print_r(str_split(“Hello”));
输入: 要分割的字符串|每个数组元素的长度,默认 1
输出结果: Array ( [0] => H [1] => e [2] => l [3] => l [4] => o )(拆分后的字符串数组)

21.strrev(): 反转字符串 反转字符串
echo strrev(“Hello World!”);
输入:需要翻转的字符串
输出结果: !dlroW olleH(目标字符串颠倒顺序后的字符串)

22.wordwrap(): 按照指定长度对字符串进行折行处理 按照指定长度对字符串进行折行处理
s t r = " A n e x a m p l e o n a l o n g w o r d i s : S u p e r c a l i f r a g u l i s t i c " ; e c h o w o r d w r a p ( str = "An example on a long word is:Supercalifragulistic"; echo wordwrap( str="Anexampleonalongwordis:Supercalifragulistic";echowordwrap(str,15);
输入: 目标字符串|最大宽数
输出结果: An example on a long word is:Supercalifragulistic(折行后的新字符串)

23.str_shuffle(): 随机地打乱字符串中所有字符 随机地打乱字符串中所有字符
echo str_shuffle(“Hello World”);
输入: 目标字符串顺序
输出: 打乱后的字符串

24.parse_str(): 将字符串解析成变量 将字符串解析成变量
parse_str(“id=23&name=John%20Adams”, m y A r r a y ) ; p r i n t r ( myArray); print_r( myArray);printr​(myArray);
输入: 要解析的字符串|存储变量的数组名称
输出: Array( [id] => 23 [name] => John Adams)

25.number_format(): 通过千位分组来格式化数字 通过千位分组来格式化数字
echo number_format(20000000000);
输入: 要格式化的数字|规定多少个小数|规定用作小数点的字符 串|规定用作千位分
隔符的字符串
输出: 20,000,000,000

四、 大小写转换
26.strtolower(): 字符串转为小写 字符串转为小写
echo strtolower(“Hello WORLD!”);
输入:目标字符串
输出结果:hello world!(全部小写字符串)

27.strtoupper(): 字符串转为大写 字符串转为大写
echo strtoupper(“Hello WORLD!”);
输入:目标字符串
输出结果: HELLO WORLD! (全部 大写字符串)

28.ucfirst(): 字符串首字母大写 字符串首字母大写
echo ucfirst(“hello world”);
输入:目标字符串
输出结果:Hello world(字符串首个字母大写)

29.ucwords(): 字符串每个单词首字符转为大写 字符串每个单词首字符转为大写
echo ucwords(“hello world”);
输出结果:Hello World(每个单词的首写字母都大写)

五、l html 标签关联
30.htmlentities(): 把字符转为 HTML 实体 实体
KaTeX parse error: Expected 'EOF', got '&' at position 13: str = "John &̲ 'Adams'"; echo…str, ENT_COMPAT);
输出结果:John & ‘Adams’

31.htmlspecialchars(): 预定义字符转 html 编码 编码
s t r = " T h i s i s s o m e < b > b o l d < / b > t e x t . " ; e c h o h t m l s p e c i a l c h a r s ( str = "This is some <b>bold</b> text."; echo htmlspecialchars( str="Thisissome<b>bold</b>text.";echohtmlspecialchars(str);
输出结果:This is some bold text.

32.nl2br(): \n 转义为 转义为 标签
echo nl2br(“One line.\nAnother line.”);
输出结果: One line.
Another line.( 处理后的字符串 )

33.strip_tags(): 去 剥去 HTML 、XML 及 以及 PHP 的标签 的标签
echo strip_tags("Hello world! ");
输出结果:Hello world!

34.addcslashes():在指定的字符前添加反斜线转义字符串中字符 在指定的字符前添加反斜线转义字符串中字符
s t r = " H e l l o , m y n a m e i s J o h n A d a m s . " ; e c h o a d d c s l a s h e s ( str = "Hello, my name is John Adams."; echo addcslashes( str="Hello,mynameisJohnAdams.";echoaddcslashes(str,‘m’);
输入: 目标字符串|指定的特定字符或字符范围
输出结果:Hello,\my na\me is John Ad\ms.

35.stripcslashes(): 删除由 addcslashes()添加的反斜线 添加的反斜线
echo stripcslashes(“Hello, \my na\me is Kai Ji\m.”);
输入:目标字符串
输出结果:Hello, my name is Kai Jim.

36.addslashes(): 指定预定义字符前添加反斜线 指定预定义字符前添加反斜线
s t r = " W h o ′ s J o h n A d a m ’ s ? " ; e c h o a d d s l a s h e s ( str = "Who's John Adam’s?"; echo addslashes( str="Who′sJohnAdam’s?";echoaddslashes(str);
输出结果: Who’s John Adam’s? (把目标串中的’ " \和 null 进行转义处理)

37.stripslashes(): 删除由 addslashes()添加的转义字符 添加的转义字符
echo stripslashes(“Who’s John Adams?”);
输出结果:Who’s John Adams?(清除转义符号)

38.quotemeta(): 在字符串中某些预定义的字符前添加反斜线 在字符串中某些预定义的字符前添加反斜线
s t r = " H e l l o w o r l d . ( c a n y o u h e a r m e ? ) " ; e c h o q u o t e m e t a ( str = "Hello world. (can you hear me?)"; echo quotemeta( str="Helloworld.(canyouhearme?)";echoquotemeta(str);
输出结果:Hello world. (can you hear me?)

39.chr(): 的 从指定的 ASCII 值返回字符 值返回字符
echo chr(052);
输出结果: *( ASCII 值返回对应的字符 )

40.ord(): 返回字符串第一个字符的 ASCII 值 值
echo ord(“hello”);
输出结果:104(字符串第一个字符的 ASCII 值)

六、 字符串比较
41.strcasecmp(): 不区分大小写比较两字符串 不区分大小写比较两字符串
echo strcasecmp(“Hello world!”,“HELLO WORLD!”);
输入: 两个目标字符串
输出结果:0(如果两个字符串相等,0|如果 string1 小于 string2,小于 0|如果 string1 大
于 string2,大于 0)

42.strcmp(): 区分大小写比较两字符串 区分大小写比较两字符串
echo strcmp(“Hello world!”,“Hello world!”);
输入:两个目标字符串
输出结果:0(如果两个字符串相等,0|如果 string1 小于 string2,小于 0|如果 string1 大
于 string2,大于 0)

43.strncmp(): 比较字符串前 n 个字符,区分大小写 区分大小写
echo strncmp(“Hello world!”,“Hello earth!”,6);
输入:两个比较的字符串和指定的比较长度
输出结果:0(如果两个字符串相等,0|如果 string1 小于 string2,小于 0|如果 string1
大于 string2,大于 0)

44.strncasecmp(): 比较字符串前 n 个字符,不区分大小写 不区分大小写
echo strncasecmp(“I love China!”,“i LOVE Shanghai!”,6);
输入:两个比较的字符串和指定的比较长度
输出结果:0(如果两个字符串相等,0|如果 string1 小于 string2,小于 0|如果 string1
大于 string2,大于 0)

45.strnatcmp(): 自然顺序法比较字符串长度,区分大小写 区分大小写
echo strnatcmp(“2Hello world!”,“10Hello world!”);
输入: 目标字符串
输出结果:-1(如果两个字符串相等,0|如果 string1 小于 string2,小于 0|如果 string1
大于 string2,大于 0)

46.strnatcasecmp(): 自然顺序法比较字符串长度, 不区分大小写 不区分大小写
echo strnatcasecmp(“10Hello world!”,“2Hello WORLD!”);
输入目标:输入: 目标字符串
输出结果:1(如果两个字符串相等,0|如果 string1 小于 string2,小于 0|如果 string1
大于 string2,大于 0)

七、 字符串切割与拼接
47.chunk_split():将字符串分成小块 :将字符串分成小块
s t r = " S h a n g h a i " ; e c h o c h u n k s p l i t ( str = "Shanghai"; echo chunk_split( str="Shanghai";echochunks​plit(str,1,".");
输入: 目标字串,长度,插入结束符
输出: S.h.a.n.g.h.a.i.(分割后的字符串)

48.strtok(): 切开字符串 切开字符串
$string = “Hello world. Beautiful day today.”;
t o k e n = s t r t o k ( token = strtok( token=strtok(string, " ");
输入:目标字符串
输出结果:Hello
world.
Beautiful
day
today(以$token 为标志切割返回切割后的字符串)

49.explode(): 使用一个字符串为标志分割另一个字符串 使用一个字符串为标志分割另一个字符串
s t r = " H e l l o w o r l d . I l o v e S h a n g h a i ! " ; p r i n t r ( e x p l o d e ( " " , str = "Hello world. I love Shanghai!"; print_r (explode(" ", str="Helloworld.IloveShanghai!";printr​(explode("",str));
输入: 分割符,目标字符串,返回数组最多包含元素数
输出: Array ( [0] => Hello [1] => world. [2] => I [3] => love [4] => Shanghai! )(字符串被分割
后形成的数组)

50.implode(): 同 同 join,将数组值用预订字符连接成字符串 将数组值用预订字符连接成字符串
a r r = a r r a y ( ′ H e l l o ′ , ′ W o r l d ! ′ , ′ I ′ , ′ l o v e ′ , ′ S h a n g h a i ! ′ ) ; e c h o i m p l o d e ( " " , arr = array('Hello','World!','I','love','Shanghai!'); echo implode(" ", arr=array(′Hello′,′World!′,′I′,′love′,′Shanghai!′);echoimplode("",arr);
输入:分隔符,用””则直接相连
输出结果:Hello World! I love Shanghai!

51.substr(): 截取字符串 截取字符串
echo substr(“Hello world”,6);
输入:目标字符串,开始下标位置(下标从 0 开始)
输出结果:world

八、 字符串查找替换
52.str_replace(): 字符串替换操作,区分大小写 区分大小写
echo str_replace(“world”,“Shanghai”,“Hello world!”);
输入: 查找的字符串,替换的字符串,被查找字串
输出: Hello Shanghai(返回替换后的结果)

53.str_ireplace() 字符串替换操作,不区分大小写 不区分大小写
echo str_ireplace(“WORLD”,“Shanghai”,“Hello world!”);
输入: 查找的字符串,替换的字符串,被查找字串
输出: Hello Shanghai!(返回替换后的结果)

54.substr_count(): 统计一个字符串,在另一个字符串中出现次数 在另一个字符串中出现次数
echo substr_count(“I love Shanghai. Shanghai is the biggest city in china.”,“Shanghai”);
输入:被统计字符串,检查的目标字符串
输出结果:2

55.substr_replace(): 替换字符串中某串为另一个字符串 替换字符串中某串为另一个字符串
echo substr_replace(“Hello”,“world”,0);
输入:查找字符串,替换上的字符串,起始位置(下标为 0 开始)
输出结果:world

56.similar_text(): 返回两字符串相同字符的数量 返回两字符串相同字符的数量
echo similar_text(“Hello World”,“Hello Shanghai”);
输入: 两个比较的字符串
输出: 6(整形,相同字符数量)

57.strrchr(): 返回一个字符串在另一个字符串中最后一次出现位置开始到末尾的字符串 返回一个字符串在另一个字符串中最后一次出现位置开始到末尾的字符串
echo strrchr(“I love Shanghai!”,“Shanghai”);
输出结果:Shanghai!

58.strstr(): 返回一个字符串在另一个字符串中开始位置到结束的字符串 返回一个字符串在另一个字符串中开始位置到结束的字符串
echo strstr(“I love Shanghai!”,“Shanghai”);
输出结果:Shanghai!

59.strchr(): strstr() 的别名,返回一个字符串在另一个字符串中首次出现的位置开始到末尾的字符 返回一个字符串在另一个字符串中首次出现的位置开始到末尾的字符

echo strchr(“Hello world!”,“world”);
输出结果:world!

60.stristr(): 返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写 返回一个字符串在另一个字符串中开始位置到结束的字符串,不区分大小写
echo stristr(“Hello world!”,“WORLD”);
输出结果:world!

61.strtr(): 转换字符串中的某些字符 转换字符串中的某些字符
echo strtr(“Hilla Warld”,“ia”,“eo”);
输入:目标字符串,要替换掉的字符,替换上的字符
输出结果:Hello World

62.strpos(): 寻找字符串中某字符最先出现的位置 寻找字符串中某字符最先出现的位置
echo strpos(“You love php, I love php too!”,“php”);
输出结果:9(下标从 0 开始)

63.stripos(): 寻找字符串中某字符最先出现的位置,不区分大小写 不区分大小写
echo stripos(“You love php, I love php too!”,“PHP”);
输出结果:9(下标从 0 开始)

64.strrpos(): 寻找某字符串中某字符最后出现的位置 寻找某字符串中某字符最后出现的位置
echo strrpos(“You love php, I love php too!”,“php”);
输出结果:21(下标从 0 开始)

65.strripos(): 寻找某字符串中某字符最后出现的位置,不区分大小写 不区分大小写
echo strripos(“You love php, I love php too!”,“PHP”);
输入:目标字符串,查找字符串
输出结果:21(下标从 0 开始)

66.strspn(): 返回字符串中首次符合 mask 的子字符串长度 的子字符串长度
echo strspn(“Hello world!”,“kHlleo”);
输入:目标字符串,
输出结果:5("kHlleo"在"Hello world!"中,有 5 个字符串 Hello 符合)

67.strcspn(): 返回字符串中不符合 mask 的字符串的长度 的字符串的长度
echo strcspn(“Hello world!”,“w”);
输入: 被查询,查询字符串,开始查询的字符,是查询长度
输出: 返回从开始到第几个字符

九、字符串统计
68.str_word_count(): 统计字符串含有的单词数 统计字符串含有的单词数
echo str_word_count(“I love Shanghai!”);
输入: 目标字符串
输出: 3(统计处的数量)

69.strlen(): 统计字符串长度 int strlen(str $str)
echo strlen(“Shanghai”);
输入: 目标字符串
输出结果: 8(整型长度)

70.count_chars(): 统计字符串中所有字母出现次数(0…255)
s t r = " H e l l o W o r l d ! " ; e c h o c o u n t c h a r s ( str = "Hello World!"; echo count_chars( str="HelloWorld!";echocountc​hars(str,3);
输入:目标字符串
输出结果:!HWdelor(根据 ASCII 码先后显示输出)

十、字符串编码
71.md5(): 字符串 md5 编码 编码
s t r = " H e l l o " ; e c h o m d 5 ( str = "Hello"; echo md5( str="Hello";echomd5(str);
输入:目标加密字符串
输出结果: 8b1a9953c4611296a827abf8c47804d7

十一、 数组创建
72.array(): 生成一个数组 生成一个数组
a = a r r a y ( " D o g " , " C a t " , " H o r s e " ) ; p r i n t r ( a=array("Dog","Cat","Horse"); print_r( a=array("Dog","Cat","Horse");printr​(a);
输入:数组值或键=>值一个数组型变量
输出结果: Array ( [0] => Dog [1] => Cat [2] => Horse )

73.array_combine(): 生成一个数组,用一个数组的值 用一个数组的值 作为键名 作为键名,另一个数组值作为值 另一个数组值作为值
$a1=array(“a”,“b”,“c”,“d”);
a 2 = a r r a y ( " C a t " , " D o g " , " H o r s e " , " C o w " ) ; p r i n t r ( a r r a y c o m b i n e ( a2=array("Cat","Dog","Horse","Cow"); print_r(array_combine( a2=array("Cat","Dog","Horse","Cow");printr​(arrayc​ombine(a1, a 2 ) ) ; 输 入 : a2)); 输入: a2));输入:a1 为提供键,$a2 提供值
输出结果: Array ( [a] => Cat [b] => Dog [c] => Horse [d] => Cow ) ( 合
成后的数组 )

74.range(): 创建并返回一个包含指定范围的元素的数组。 创建并返回一个包含指定范围的元素的数组。
n u m b e r = r a n g e ( 0 , 50 , 10 ) ; p r i n t r ( number = range(0,50,10); print_r ( number=range(0,50,10);printr​(number);
输入: 最小值,最大值,步长
输出结果: Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5]
=> 50 )( 合成后的数组 )

75.compact(): 创建一个由参数所带变量组成的数组 创建一个由参数所带变量组成的数组
$firstname = “Peter”;
$lastname = “Griffin”;
$age = “38”;
r e s u l t = c o m p a c t ( " f i r s t n a m e " , " l a s t n a m e " , " a g e " ) ; p r i n t r ( result = compact("firstname", "lastname", "age"); print_r( result=compact("firstname","lastname","age");printr​(result);
输入:变量或数组
输出结果: Array ( [firstname] => Peter [lastname] => Griffin [age] =>
38 )( 返回由变量名为键,变量值为值的数组,变量也可以为多维数组.会递归处理 )

76.array_fill(): 用给定的填充( 值生成)数组 数组
a = a r r a y f i l l ( 2 , 3 , " D o g " ) ; p r i n t r ( a=array_fill(2,3,"Dog"); print_r( a=arrayf​ill(2,3,"Dog");printr​(a);
输入:键,填充的数量,填充内容
输出结果: Array ( [2] => Dog [3] => Dog [4] => Dog )( 返回完成的数组 )

十二、数组合并和拆分
77.array_chunk(): 把一个数组分割为新的数组块 把一个数组分割为新的数组块
a = a r r a y ( " a " = > " C a t " , " b " = > " D o g " , " c " = > " H o r s e " , " d " = > " C o w " ) ; p r i n t r ( a r r a y c h u n k ( a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse","d"=>"Cow"); print_r(array_chunk( a=array("a"=>"Cat","b"=>"Dog","c"=>"Horse","d"=>"Cow");printr​(arrayc​hunk(a,2));
输入:一个数组
输出结果: Array ( [0] => Array ( [0] => Cat [1] => Dog ) [1] => Array
( [0] => Horse [1] => Cow ) )( 分割后的多维数组,规定每个新数组包含 2 个元素 )

78.array_merge(): 把两个或多个数组合并为一个数组。 把两个或多个数组合并为一个数组。
$a1=array(“a”=>“Horse”,“b”=>“Dog”);
a 2 = a r r a y ( " c " = > " C o w " , " b " = > " C a t " ) ; p r i n t r ( a r r a y m e r g e ( a2=array("c"=>"Cow","b"=>"Cat"); print_r(array_merge( a2=array("c"=>"Cow","b"=>"Cat");printr​(arraym​erge(a1,$a2));
输入: 两个数组
输出: Array ( [a] => Horse [b] => Cat [c] => Cow ) ( 返回完成后的数组 )

79.array_slice(): 在数组中根据条件取出一段值,并返回。 在数组中根据条件取出一段值,并返回。

a = a r r a y ( 0 = > " D o g " , 1 = > " C a t " , 2 = > " H o r s e " , 3 = > " B i r d " ) ; p r i n t r ( a r r a y s l i c e ( a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird"); print_r(array_slice( a=array(0=>"Dog",1=>"Cat",2=>"Horse",3=>"Bird");printr​(arrays​lice(a,1,2));
输入: 一个数组
输出: Array ( [0] => Cat [1] => Horse )( 1 为从’Cat’开始,2 为返回两个元素 )

十三、数组比较
80.array_diff(): 返回两个数组的差集数组 返回两个数组的差集数组
$a1=array(0=>“Cat”,1=>“Dog”,2=>“Horse”);
a 2 = a r r a y ( 3 = > " H o r s e " , 4 = > " D o g " , 5 = > " F i s h " ) ; p r i n t r ( a r r a y d i f f ( a2=array(3=>"Horse",4=>"Dog",5=>"Fish"); print_r(array_diff( a2=array(3=>"Horse",4=>"Dog",5=>"Fish");printr​(arrayd​iff(a1,$a2));
输入: 两个或多个数组
输出结果: Array ( [0] => Cat )( a 1 与 a1 与 a1与a2 的不同之处 )

81.array_intersect(): 返回两个或多个数组的交集数组 返回两个或多个数组的交集数组
$a1=array(“a”=>“red”,“b”=>“green”,“c”=>“blue”,“d”=>“yellow”);
$a2=array(“e”=>“red”,“f”=>“green”,“g”=>“blue”);
r e s u l t = a r r a y i n t e r s e c t ( result=array_intersect( result=arrayi​ntersect(a1, a 2 ) ; p r i n t r ( a2); print_r( a2);printr​(result);
输入:两个或多个数组
输出结果: Array ( [a] => red [b] => green [c] => blue )( a 1 与 a1 与 a1与a2 的相
同之处 )

十四、数组查找替换
82.array_search(): 在数组中查找一个值,返回一个键,没有返回返回假 在数组中查找一个值,返回一个键,没有返回返回假
a = a r r a y ( " a " = > " D o g " , " b " = > " C a t " , " c " = > " H o r s e " ) ; e c h o a r r a y s e a r c h ( " D o g " , a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse"); echo array_search("Dog", a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");echoarrays​earch("Dog",a);
输入: 一个数组
输出: a( 成功返回键名,失败返回 false )

83.array_splice(): 把数组中一部分删除用其他值替代 把数组中一部分删除用其他值替代
$a1=array(0=>“Dog”,1=>“Cat”,2=>“Horse”,3=>“Bird”);
a 2 = a r r a y ( 0 = > " T i g e r " , 1 = > " L i o n " ) ; a r r a y s p l i c e ( a2=array(0=>"Tiger",1=>"Lion"); array_splice( a2=array(0=>"Tiger",1=>"Lion");arrays​plice(a1,0,2, a 2 ) ; p r i n t r ( a2); print_r( a2);printr​(a1);
输入: 一个或多个数组
输出: Array ( [0] => Tiger [1] => Lion [2] => Horse [3] => Bird )( a 1 被 移 除 的 部 分 由 a1 被移除的部分由 a1被移除的部分由a2 补全 )

84.array_sum(): 返回数组中所有值的总和 返回数组中所有值的总和
a = a r r a y ( 0 = > " 5 " , 1 = > " 15 " , 2 = > " 25 " ) ; e c h o a r r a y s u m ( a=array(0=>"5",1=>"15",2=>"25"); echo array_sum( a=array(0=>"5",1=>"15",2=>"25");echoarrays​um(a);
输入: 一个数组
输出: 45(返回和)

85.in_array(): 在数组中搜索给定的值,区分大小写 区分大小写
p e o p l e = a r r a y ( " P e t e r " , " J o e " , " G l e n n " , " C l e v e l a n d " ) ; i f ( i n a r r a y ( " G l e n n " , people = array("Peter", "Joe", "Glenn", "Cleveland"); if (in_array("Glenn", people=array("Peter","Joe","Glenn","Cleveland");if(ina​rray("Glenn",people) ){
echo “Match found”;
} else{
echo “Match not found”;
}
输入: 需要搜索的值|数组
输出结果: Match found

86.array_key_exists(): 的 判断某个数组中是否存在指定的 key
a = a r r a y ( " V o l v o " = > " X C 90 " , " B M W " = > " X 5 " ) ; i f ( a r r a y k e y e x i s t s ( " V o l v o " , a=array("Volvo"=>"XC90","BMW"=>"X5"); if (array_key_exists("Volvo", a=array("Volvo"=>"XC90","BMW"=>"X5");if(arrayk​eye​xists("Volvo",a))
{echo “键存在!”;}
else {echo “键不存在!”;}
输入: 需要搜索的键名|数组
输出结果:键存在!

十五、数组指针操作
87.key(): 返回数组内部指针当前指向元素的键名 返回数组内部指针当前指向元素的键名
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; e c h o " 键 的 当 前 位 置 是 : " . k e y ( people = array("Bill", "Steve", "Mark", "David"); echo "键的当前位置是:" . key( people=array("Bill","Steve","Mark","David");echo"键的当前位置是:".key(people);
输入:目标数组或者数组变量
输出结果:键的当前位置是:0

88.current(): 返回数组中的当前元素( 单元).
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; e c h o c u r r e n t ( people = array("Bill", "Steve", "Mark", "David"); echo current( people=array("Bill","Steve","Mark","David");echocurrent(people) . “
”;
输入:目标数组或者数组变量
输出结果:Bill

89.next(): 把指向当前元素的指针移动到下一个元素的位置,并返回当前元素的值 并返回当前元素的值
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; e c h o c u r r e n t ( people = array("Bill", "Steve", "Mark", "David"); echo current( people=array("Bill","Steve","Mark","David");echocurrent(people) . “
”;
echo next($people);
输入:目标数组或者数组变量
输出结果:Bill
Steve(查询当前指针的下个指针指向的内容)

90.prev(): 把指向当前元素的指针移动到上一个元素的位置,并返回当前元素的值 并返回当前元素的值
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; e c h o c u r r e n t ( people = array("Bill", "Steve", "Mark", "David"); echo current( people=array("Bill","Steve","Mark","David");echocurrent(people) . “
”;
echo next( p e o p l e ) . " < b r > " ; e c h o p r e v ( people) . "<br>"; echo prev( people)."<br>";echoprev(people);
输入:目标数组或者数组变量
输出结果:Bill
Steve
Bill

91.end(): 将数组内部指针指向最后一个元素,并返回该元素的值( 如果成功)
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; e c h o c u r r e n t ( people = array("Bill", "Steve", "Mark", "David"); echo current( people=array("Bill","Steve","Mark","David");echocurrent(people) . “
”;
echo end($people);
输入:目标数组或者数组变量
输出结果:Bill
David

92.reset(): 把数组的内部指针指向第一个元素,并返回这个元素的值 把数组的内部指针指向第一个元素,并返回这个元素的值
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; e c h o c u r r e n t ( people = array("Bill", "Steve", "Mark", "David"); echo current( people=array("Bill","Steve","Mark","David");echocurrent(people) . “
”;
echo next( p e o p l e ) . " < b r > " ; e c h o r e s e t ( people) . "<br>"; echo reset( people)."<br>";echoreset(people);
输出结果:Bill
Steve
Bill

93.list(): 用数组中的元素为一组变量赋值 用数组中的元素为一组变量赋值
m y a r r a y = a r r a y ( " D o g " , " C a t " , " H o r s e " ) ; l i s t ( my_array = array("Dog","Cat","Horse"); list( mya​rray=array("Dog","Cat","Horse");list(a, $b, $c) = $my_array;
echo “I have several animals, a $a, a $b and a $c.”;
输入: 需要赋值的变量
输出结果: I have several animals, a Dog, a Cat and a Horse. ( 变量分别匹配数组中的值 )

94.array_shift(): 删除数组中的第一个元素,并返回被删除元素的值 删除数组中的第一个元素,并返回被删除元素的值
a = a r r a y ( " a " = > " D o g " , " b " = > " C a t " , " c " = > " H o r s e " ) ; e c h o a r r a y s h i f t ( a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse"); echo array_shift( a=array("a"=>"Dog","b"=>"Cat","c"=>"Horse");echoarrays​hift(a);
print_r ($a);
输出结果: Dog
Array ( [b] => Cat [c] => Horse )

95.array_unshift(): 在数组开头插入一个或多个元素 在数组开头插入一个或多个元素
a = a r r a y ( " a " = > " C a t " , " b " = > " D o g " ) ; a r r a y u n s h i f t ( a=array("a"=>"Cat","b"=>"Dog"); array_unshift( a=array("a"=>"Cat","b"=>"Dog");arrayu​nshift(a,“Horse”);
print_r($a);
输出结果: Array ( [0] => Horse [a] => Cat [b] => Dog )

96.array_push(): 向数组最后压入一个或多个元素 向数组最后压入一个或多个元素
a = a r r a y ( " D o g " , " C a t " ) ; a r r a y p u s h ( a=array("Dog","Cat"); array_push( a=array("Dog","Cat");arrayp​ush(a,“Horse”,“Bird”);
print_r($a);
输入: 目标数组|需要压入的值
输出结果: Array ( [0] => Dog [1] => Cat [2] => Horse [3] => Bird ) ( 新
的数组 )

97.array_pop(): 取得(删除)数组中的最后一个元素 取得(删除)数组中的最后一个元素
a = a r r a y ( " D o g " , " C a t " , " H o r s e " ) ; a r r a y p o p ( a=array("Dog","Cat","Horse"); array_pop( a=array("Dog","Cat","Horse");arrayp​op(a);
print_r($a);
输入: 目标数组
输出结果: Array ( [0] => Dog [1] => Cat ) ( 返回数组剩余元素 )

十六、数组键值操作
98.shuffle(): 将数组打乱,保留键名 保留键名
m y a r r a y = a r r a y ( " a " = > " D o g " , " b " = > " C a t " ) ; s h u f f l e ( my_array = array("a" => "Dog", "b" => "Cat"); shuffle( mya​rray=array("a"=>"Dog","b"=>"Cat");shuffle(my_array);
print_r($my_array);
输入: 一个或多个数组
输出结果: 顺序打乱后的数组

99.count(): 计算数组中的单元数目或对象中的属性个数 计算数组中的单元数目或对象中的属性个数
$people = array(“Peter”, “Joe”, “Glenn”, “Cleveland”);
r e s u l t = c o u n t ( result = count( result=count(people);
echo $result;
输入: 目标数组
输出结果: 4(输出元素个数)

100.array_flip(): 返回一个键值反转后的数组 返回一个键值反转后的数组
a = a r r a y ( 0 = > " D o g " , 1 = > " C a t " , 2 = > " H o r s e " ) ; p r i n t r ( a r r a y f l i p ( a=array(0=>"Dog",1=>"Cat",2=>"Horse"); print_r(array_flip( a=array(0=>"Dog",1=>"Cat",2=>"Horse");printr​(arrayf​lip(a));
输出结果: Array ( [Dog] => 0 [Cat] => 1 [Horse] => 2 )( 返回完成后的数
组 )

101.array_keys(): 返回数组所有的键,组成一个数组 组成一个数组
a = a r r a y ( " a " = > " H o r s e " , " b " = > " C a t " , " c " = > " D o g " ) ; p r i n t r ( a r r a y k e y s ( a=array("a"=>"Horse","b"=>"Cat","c"=>"Dog"); print_r(array_keys( a=array("a"=>"Horse","b"=>"Cat","c"=>"Dog");printr​(arrayk​eys(a));
输出结果: Array ( [0] => a [1] => b [2] => c )( 返回由键名组成的数组 )

102.array_values(): 返回数组中所有值,组成一个数组 返回数组中所有值,组成一个数组
a = a r r a y ( " N a m e " = > " B i l l " , " A g e " = > " 60 " , " C o u n t r y " = > " U S A " ) ; p r i n t r ( a r r a y v a l u e s ( a=array("Name"=>"Bill","Age"=>"60","Country"=>"USA"); print_r(array_values( a=array("Name"=>"Bill","Age"=>"60","Country"=>"USA");printr​(arrayv​alues(a));
输出结果: Array ( [0] => Bill [1] => 60 [2] => USA )( 返回由键值组成的
数组 )

103.array_reverse(): 返回一个元素顺序相反的数组 返回一个元素顺序相反的数组 元素顺序相反的一个数组,键名和键值依然
匹配
a = a r r a y ( " a " = > " V o l v o " , " b " = > " B M W " , " c " = > " T o y o t a " ) ; p r i n t r ( a r r a y r e v e r s e ( a=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota"); print_r(array_reverse( a=array("a"=>"Volvo","b"=>"BMW","c"=>"Toyota");printr​(arrayr​everse(a));
输出结果: Array ( [c] => Toyota [b] => BMW [a] => Volvo )

104.array_count_values(): 统计数组中所有的值出现的次数 统计数组中所有的值出现的次数
a = a r r a y ( " C a t " , " D o g " , " H o r s e " , " D o g " ) ; p r i n t r ( a r r a y c o u n t v a l u e s ( a=array("Cat","Dog","Horse","Dog"); print_r(array_count_values( a=array("Cat","Dog","Horse","Dog");printr​(arrayc​ountv​alues(a));
输出结果: Array ( [Cat] => 1 [Dog] => 2 [Horse] => 1 )( 返回数组原键值
为新键名,次数为新键值 )

105.array_rand(): 从数组中随机抽取一个或多个元素, 注意是键名!!!
a = a r r a y ( " a " = > " r e d " , " b " = > " g r e e n " , " c " = > " b l u e " , " d " = > " y e l l o w " ) ; p r i n t r ( a r r a y r a n d ( a=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow"); print_r(array_rand( a=array("a"=>"red","b"=>"green","c"=>"blue","d"=>"yellow");printr​(arrayr​and(a,2));
输入:目标数组, 返回多少随机键名
输出结果:返回 2 个随机的键名

106.each(): 返回数组中当前的键/值对并将数组指针向前移动一步 返回数组中当前的键/值对并将数组指针向前移动一步 调用 调用 array each ( array
&$array )
p e o p l e = a r r a y ( " B i l l " , " S t e v e " , " M a r k " , " D a v i d " ) ; p r i n t r ( e a c h ( people = array("Bill", "Steve", "Mark", "David"); print_r (each( people=array("Bill","Steve","Mark","David");printr​(each(people));
输出结果: Array ( [1] => Bill [value] => Bill [0] => 0 [key] => 0 )
在执行 each() 之后,数组指针将停留在数组中的下一个单元或者当碰到数组结尾时停
留在最后一个单元。如果要再用 each 遍历数组,必须使用 reset()。
返回值: 数组中当前指针位置的键/值对并向前移动数组指针。键值对被返回为四个单
元的数组,键名为 0,1,key 和 value。单元 0 和 key 包含有数组单元的键名,1 和 value
包含有数据。 如果内部指针越过了数组的末端,则 each() 返回 FALSE。

107.array_unique(): 删除重复值,返回剩余数组 删除重复值,返回剩余数组
a = a r r a y ( " a " = > " C a t " , " b " = > " D o g " , " c " = > " C a t " ) ; p r i n t r ( a r r a y u n i q u e ( a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat"); print_r(array_unique( a=array("a"=>"Cat","b"=>"Dog","c"=>"Cat");printr​(arrayu​nique(a));
输入: 目标数组
输出结果: Array ( [a] => Cat [b] => Dog )( 返回无重复值数组,键名不变 )

十七、数组排序
108.sort(): 按升序对给定数组的值排序,不保留键名 不保留键名
c a r s = a r r a y ( " V o l v o " , " B M W " , " T o y o t a " ) ; s o r t ( cars=array("Volvo","BMW","Toyota"); sort( cars=array("Volvo","BMW","Toyota");sort(cars);
输出结果:BMW
Toyota
Volvo

109.rsort(): 按降序对给定数组的值排序,不保留键名 不保留键名
c a r s = a r r a y ( " V o l v o " , " B M W " , " T o y o t a " ) ; r s o r t ( cars=array("Volvo","BMW","Toyota"); rsort( cars=array("Volvo","BMW","Toyota");rsort(cars);
输出结果:Volvo
Toyota
BMW

110.asort(): 按升序 按升序 对 关联 数组 的键值排序 排序,保持索引关系 保持索引关系
a g e = a r r a y ( " B i l l " = > " 60 " , " S t e v e " = > " 56 " , " M a r k " = > " 31 " ) ; a s o r t ( age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31"); asort( age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31");asort(age);
输出结果:Key=Mark, Value=31
Key=Steve, Value=56
Key=Bill, Value=60

111.arsort(): 按降序 按降序 对 关联 数组 的键值排序 排序,保持索引关系 保持索引关系
a g e = a r r a y ( " B i l l " = > " 60 " , " S t e v e " = > " 56 " , " M a r k " = > " 31 " ) ; a r s o r t ( age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31"); arsort( age=array("Bill"=>"60","Steve"=>"56","Mark"=>"31");arsort(age);
输出结果:Key=Bill, Value=60
Key=Steve, Value=56
Key=Mark, Value=31

112.ksort(): 按升序 按升序 对 关联 数组 的键名排序 排序,保持索引关系 保持索引关系
a g e = a r r a y ( " B i l l " = > " 60 " , " S t e v e " = > " 56 " , " m a r k " = > " 31 " ) ; k s o r t ( age=array("Bill"=>"60","Steve"=>"56","mark"=>"31"); ksort( age=array("Bill"=>"60","Steve"=>"56","mark"=>"31");ksort(age);
输出结果:Key=Bill, Value=60
Key=Steve, Value=56
Key=mark, Value=31

113.krsort(): 按降序 按降序 对 关联 数组 的键名排序 排序,保持索引关系 保持索引关系
a g e = a r r a y ( " B i l l " = > " 60 " , " S t e v e " = > " 56 " , " m a r k " = > " 31 " ) ; k r s o r t ( age=array("Bill"=>"60","Steve"=>"56","mark"=>"31"); krsort( age=array("Bill"=>"60","Steve"=>"56","mark"=>"31");krsort(age);
输出结果:Key=mark, Value=31
Key=Steve, Value=56
Key=Bill, Value=60

114.natsort(): 用自然顺序算法对数组中的元素排序 用自然顺序算法对数组中的元素排序
t e m p f i l e s = a r r a y ( " t e m p 15. t x t " , " t e m p 10. t x t " , " t e m p 1. t x t " , " t e m p 22. t x t " , " t e m p 2. t x t " ) ; s o r t ( temp_files = array("temp15.txt","temp10.txt","temp1.txt","temp22.txt","temp2.txt"); sort( tempf​iles=array("temp15.txt","temp10.txt","temp1.txt","temp22.txt","temp2.txt");sort(temp_files);
echo “标准排序:”;
print_r( t e m p f i l e s ) ; e c h o " < b r > " ; n a t s o r t ( temp_files); echo "<br>"; natsort( tempf​iles);echo"<br>";natsort(temp_files);
echo “自然排序:”;
print_r($temp_files);
输出结果:
标准排序:Array ( [0] => temp1.txt [1] => temp10.txt [2] => temp15.txt [3] => temp2.txt [4]
=> temp22.txt )
自然排序:Array ( [0] => temp1.txt [3] => temp2.txt [1] => temp10.txt [2] => temp15.txt [4]
=> temp22.txt )

115.natcasesort(): 自然排序,不区分大小写 不区分大小写
t e m p f i l e s = a r r a y ( " t e m p 15. t x t " , " T e m p 10. t x t " , " t e m p 1. t x t " , " T e m p 22. t x t " , " t e m p 2. t x t " ) ; n a t s o r t ( temp_files = array("temp15.txt","Temp10.txt","temp1.txt","Temp22.txt","temp2.txt"); natsort( tempf​iles=array("temp15.txt","Temp10.txt","temp1.txt","Temp22.txt","temp2.txt");natsort(temp_files);
echo “自然排序:”;
print_r( t e m p f i l e s ) ; e c h o " < b r / > " ; n a t c a s e s o r t ( temp_files); echo "<br />"; natcasesort( tempf​iles);echo"<br/>";natcasesort(temp_files);
echo “不区分大小写的自然排序:”;
print_r($temp_files);
输出结果:
自然排序:Array ( [1] => Temp10.txt [3] => Temp22.txt [2] => temp1.txt [4] => temp2.txt [0]
=> temp15.txt )
不区分大小写的自然排序:Array ( [2] => temp1.txt [4] => temp2.txt [1] => Temp10.txt [0]
=> temp15.txt [3] => Temp22.txt )

十八、文件系统函数
116.fopen(): 者 打开文件或者 URL
$handle = fopen(“ftp://user:password@example.com/somefile.txt”, “w”);
返回值: 如果打开失败,本函数返回 FALSE

117.fclose(): 关闭一个已打开的文件指针 关闭一个已打开的文件指针
h a n d l e = f o p e n ( ′ s o m e f i l e . t x t ′ , ′ r ′ ) ; f c l o s e ( handle = fopen('somefile.txt', 'r'); fclose( handle=fopen(′somefile.txt′,′r′);fclose(handle);
输出: 如果成功则返回 TRUE,失败则返回 FALSE

十九、 文件属性
118.file_exists(): 检查文件或目录是否存在 检查文件或目录是否存在
f i l e n a m e = ′ / p a t h / t o / f o o . t x t ′ ; i f ( f i l e e x i s t s ( filename = '/path/to/foo.txt'; if (file_exists( filename=′/path/to/foo.txt′;if(filee​xists(filename)) {
echo “exists”;
} else {
echo “does not exist”;
}
输入: 指定的文件或目录
输出结果: 存在则返回 TRUE,否则返回 FALSE

119.filesize(): 取得文件大小 取得文件大小
$filename = ‘somefile.txt’;
echo f i l e n a m e . ′ : ′ . f i l e s i z e ( filename . ': ' . filesize( filename.′:′.filesize(filename) .‘bytes’;
输出结果: 返回文件大小的字节数,如果出错返回 FALSE,并生成一条 E_WARNING 级
的错误

120.is_readable(): 判断给定文件是否可读 判断给定文件是否可读
f i l e n a m e = ′ t e s t . t x t ′ ; i f ( i s r e a d a b l e ( filename = 'test.txt'; if (is_readable( filename=′test.txt′;if(isr​eadable(filename)) {
echo ‘可读’;
} else {
echo ‘不可读’;
}
输出结果: 如果由 filename 指定的文件或目录存在并且可读则返回 TRUE

121.is_writable(): 判断给定文件是否可写 判断给定文件是否可写
f i l e n a m e = ′ t e s t . t x t ′ ; i f ( i s w r i t a b l e ( filename = 'test.txt'; if (is_writable( filename=′test.txt′;if(isw​ritable(filename)) {
echo ‘可写’;
} else {
echo ‘不可写’;
}
输出结果: 如果文件存在并且可写则返回 TRUE。

122.is_executable(): 判断给定文件是否可执行 判断给定文件是否可执行
f i l e = ′ s e t u p . e x e ′ ; i f ( i s e x e c u t a b l e ( file = 'setup.exe'; if (is_executable( file=′setup.exe′;if(ise​xecutable(file)) {
echo ‘可执行’;
} else {
echo ‘不可执行’;
}
输出结果: 如果文件存在且可执行则返回 TRUE

123.filectime(): 获取文件的创建时间 获取文件的创建时间
f i l e n a m e = ′ s o m e f i l e . t x t ′ ; e c h o f i l e c t i m e ( filename = 'somefile.txt'; echo filectime( filename=′somefile.txt′;echofilectime(filename);
输出结果: 时间以 Unix 时间戳的方式返回,如果出错则返回 FALSE

124.filemtime(): 获取文件的修改时间 获取文件的修改时间
f i l e n a m e = ′ s o m e f i l e . t x t ′ ; e c h o f i l e m t i m e ( filename = 'somefile.txt'; echo filemtime( filename=′somefile.txt′;echofilemtime(filename);
输出: 返回文件上次被修改的时间,出错时返回 FALSE。时间以 Unix 时间戳的方式返回

125.fileatime(): 获取文件的上次访问时间 获取文件的上次访问时间
f i l e n a m e = ′ s o m e f i l e . t x t ′ ; e c h o f i l e a t i m e ( filename = 'somefile.txt'; echo fileatime( filename=′somefile.txt′;echofileatime(filename);
输出结果: 返回文件上次被访问的时间,如果出错则返回 FALSE.时间以 Unix 时间戳的方
式返回.

126.stat(): 获取文件大部分属性值 获取文件大部分属性值
f i l e n a m e = ′ s o m e f i l e . t x t ′ ; v a r d u m p ( f i l e a t i m e ( filename = 'somefile.txt'; var_dump(fileatime( filename=′somefile.txt′;vard​ump(fileatime(filename));
输出: 返回由 filename 指定的文件的统计信息

二十、文件操作
127.fwrite(): 写入文件 写入文件
$filename = ‘test.txt’;
$somecontent = “添加这些文字到文件\n”;
h a n d l e = f o p e n ( handle = fopen( handle=fopen(filename, ‘a’);
fwrite($handle, s o m e c o n t e n t ) ; f c l o s e ( somecontent); fclose( somecontent);fclose(handle);
输出结果: 把 string的内容写入文件指针 handle 处。如果指定了 length,当写入了 length
个字节或者写完了 string 以后,写入就会停止, 视乎先碰到哪种情况

128.fputs(): 同上 同上,是 ,是 fwrite 的别名 的别名

129.fread(): 读取文件 读取文件
$filename = “/usr/local/something.txt”;
h a n d l e = f o p e n ( handle = fopen( handle=fopen(filename, “r”);
c o n t e n t s = f r e a d ( contents = fread( contents=fread(handle, filesize( f i l e n a m e ) ) ; f c l o s e ( filename)); fclose( filename));fclose(handle);
输出结果:从文件指针 handle,读取最多 length 个字节

130.feof(): 检测文件指针是否到了文件结束的位置 检测文件指针是否到了文件结束的位置
f i l e = @ f o p e n ( " n o s u c h f i l e " , " r " ) ; w h i l e ( ! f e o f ( file = @fopen("no_such_file", "r"); while (!feof( file=@fopen("nos​uchf​ile","r");while(!feof(file)) {
}
fclose($file);
输出: 如果文件指针到了 EOF 或者出错时则返回 TRUE,否则返回一个错误(包括
socket 超时),其它情况则返回 FALSE

131.fgets(): 从文件指针中读取一行 从文件指针中读取一行
h a n d l e = @ f o p e n ( " / t m p / i n p u t f i l e . t x t " , " r " ) ; i f ( handle = @fopen("/tmp/inputfile.txt", "r"); if ( handle=@fopen("/tmp/inputfile.txt","r");if(handle) {
while (!feof($handle)) {
b u f f e r = f g e t s ( buffer = fgets( buffer=fgets(handle, 4096);
echo KaTeX parse error: Expected 'EOF', got '}' at position 9: buffer; }̲ fclose(handle);
}
输出结果: 从 handle 指向的文件中读取一行并返回长度最多为 length-1 字节的字符串.
碰到换行符(包括在返回值中)、EOF 或者已经读取了 length -1 字节后停止(看先碰到那一
种情况). 如果没有指定 length,则默认为 1K, 或者说 1024 字节.

132.fgetc(): 从文件指针中读取字符 从文件指针中读取字符
f p = f o p e n ( ′ s o m e f i l e . t x t ′ , ′ r ′ ) ; i f ( ! fp = fopen('somefile.txt', 'r'); if (! fp=fopen(′somefile.txt′,′r′);if(!fp) {
echo ‘Could not open file somefile.txt’;
} while (false !== ( c h a r = f g e t c ( char = fgetc( char=fgetc(fp))) {
echo “$char\n”;
}
输入: 目标文件中要读取的字符
输出: 返回一个包含有一个字符的字符串,该字符从 handle 指向的文件中得到. 碰到
EOF 则返回 FALSE.

133.file(): 把整个文件读入一个数组中 把整个文件读入一个数组中
l i n e s = f i l e ( ′ h t t p : / / w w w . e x a m p l e . c o m / ′ ) ; / / 在 数 组 中 循 环 , 显 示 H T M L 的 源 文 件 并 加 上 行 号 。 f o r e a c h ( lines = file('http://www.example.com/'); //在数组中循环,显示 HTML 的源文件并加 上行号。 foreach ( lines=file(′http://www.example.com/′);//在数组中循环,显示HTML的源文件并加上行号。foreach(lines as $line_num => KaTeX parse error: Expected '}', got '#' at position 20: …) { echo "Line #̲<b>{line_num} : " .
htmlspecialchars($line) . “
\n”;
} //另一个例子将 web 页面读入字符串。参见 file_get_contents()。
$html = implode(’’, file(‘http://www.example.com/’));
输出: 数组中的每个单元都是文件中相应的一行,包括换行符在内。如果失败 file() 返
回 FALSE

134.readfile(): 输出一个文件 输出一个文件
echo readfile(“test.txt”);
输出结果:There are two lines in this file.
This is the last line.
57(读入一个文件并写入到输出缓冲。返回从文件中读入的字节数。如果出
错返回 FALSE)

135.file_get_contents(): 将整个文件读入一个字符串 将整个文件读入一个字符串
echo file_get_contents(‘http://www.baidu.com’);
输出结果:百度的页面

136.file_put_contents():将一个字符串写入文件 将一个字符串写入文件
echo file_put_contents(“test.txt”,“Hello World. Testing!”);
输出结果:26(该函数将返回写入到文件内数据的字节数)

137.ftell(): 返回文件指针读/写的位置 写的位置
f i l e = f o p e n ( " t e s t . t x t " , " r " ) ; e c h o f t e l l ( file = fopen("test.txt","r"); echo ftell( file=fopen("test.txt","r");echoftell(file);
fseek( f i l e , " 15 " ) ; e c h o " < b r / > " . f t e l l ( file,"15"); echo "<br />" . ftell( file,"15");echo"<br/>".ftell(file);
fclose($file);
输出结果:0
15(返回由 handle 指定的文件指针的位置,也就是文件流中的偏移量)

138.fseek(): 在文件指针中定位 在文件指针中定位
f i l e = f o p e n ( " t e s t . t x t " , " r " ) ; / / 读 取 第 一 行 f g e t s ( file = fopen("test.txt","r"); // 读取第一行 fgets( file=fopen("test.txt","r");//读取第一行fgets(file);
// 倒回文件的开头
fseek($file,0);
输出结果: 成功则返回 0;否则返回 -1

139.rewind(): 将文件指针的位置倒回文件的开头 将文件指针的位置倒回文件的开头
f i l e = f o p e n ( " t e s t . t x t " , " r " ) ; / / 改 变 文 件 指 针 的 位 置 f s e e k ( file = fopen("test.txt","r"); //改变文件指针的位置 fseek( file=fopen("test.txt","r");//改变文件指针的位置fseek(file,“15”);
//把文件指针设定为 0
rewind($file);
输出结果:如果成功则返回 TRUE,失败则返回 FALSE

140.flock(): 轻便的执行文件锁定 轻便的执行文件锁定
f p = f o p e n ( ′ t x . t x t ′ , ′ r ′ ) ; f l o c k ( fp=fopen('tx.txt','r'); flock( fp=fopen(′tx.txt′,′r′);flock(fp, LOCK_SH); //共享锁
flock( f p , L O C K E X ) ; / / 独 立 锁 , 写 文 件 时 用 它 打 开 f l o c k ( fp, LOCK_EX); //独立锁,写文件时用它打开 flock( fp,LOCKE​X);//独立锁,写文件时用它打开flock(fp, LOCK_NB); //附加锁
flock( f p , L O C K U N ) ; / / 释 放 锁 f c l o s e ( fp, LOCK_UN); //释放锁 fclose( fp,LOCKU​N);//释放锁fclose(fp);
输出: 如果成功则返回 TRUE,失败则返回 FALSE

二十一、 目录
141.basename(): 返回路径中的文件名部分 返回路径中的文件名部分
p a t h = " / t e s t w e b / h o m e . p h p " ; / / 显 示 带 有 文 件 扩 展 名 的 文 件 名 e c h o b a s e n a m e ( path = "/testweb/home.php"; //显示带有文件扩展名的文件名 echo basename( path="/testweb/home.php";//显示带有文件扩展名的文件名echobasename(path);
//显示不带有文件扩展名的文件名
echo basename($path,".php");
输出结果: home.php
home

142.dirname(): 返回路径中的目录部分 返回路径中的目录部分
echo dirname(“c:/testweb/home.php”);
echo dirname("/testweb/home.php");
输出结果: c:/testweb
/testweb

143.pathinfo(): 返回文件路径的信息 返回文件路径的信息
print_r(pathinfo("/testweb/test.txt"));
输出结果:
Array
(
[dirname] => /testweb
[basename] => test.txt
[extension] => txt
) (返回一个关联数组包含有 path 的信息)

144.opendir(): 打开目录句柄 打开目录句柄 (打开一个目录,读取它的内容,然后关闭)
f p = o p e n d i r ( ′ / i m g e s / ′ ) ; e c h o r e a d d i r ( fp=opendir('/imges/'); echo readdir( fp=opendir(′/imges/′);echoreaddir(fp);
closedir($fp);

输出结果:cat.gif(如果成功则返回目录句柄的 resource,失败则返回 FALSE)

145.readdir(): 从目录句柄中读取条目 从目录句柄中读取条目 (返回目录中下一个文件的文件名)
f p = o p e n d i r ( ′ / i m g e s / ′ ) ; e c h o r e a d d i r ( fp=opendir('/imges/'); echo readdir( fp=opendir(′/imges/′);echoreaddir(fp);
closedir($fp);
输出结果:cat.gif(如果成功则返回目录句柄的 resource,失败则返回 FALSE)

146.closedir(): 关闭目录句柄 关闭目录句柄
f p = o p e n d i r ( ′ / i m g e s / ′ ) ; e c h o r e a d d i r ( fp=opendir('/imges/'); echo readdir( fp=opendir(′/imges/′);echoreaddir(fp);
closedir($fp);
输出结果:cat.gif(如果成功则返回目录句柄的 resource,失败则返回 FALSE)

147.rewinddir() : 倒回目录句柄 倒回目录句柄
f p = o p e n d i r ( ′ / i m a g e s / ′ ) ; e c h o r e a d d i r ( fp=opendir('/images/'); echo readdir( fp=opendir(′/images/′);echoreaddir(fp).’
’;
rewinddir( f p ) ; e c h o r e a d d i r ( fp); echo readdir( fp);echoreaddir(fp).’
’;
closedir($fp);
输出结果: 指定的目录流重置到目录的开头

148.mkdir(): 新建目录 新建目录
mkdir(‘123’);
输出结果: 新建一个指定的目录

149.rmdir(): 删除目录 删除目录
rmdir(‘123’);
输出结果: 删除指定的目录。目录必须是空的,而且要有相应的权限。如果成功则返回
TRUE,失败则返回 FALSE
150.unlink(): 删除文件 删除文件
unlink(‘123/1.txt’);
rmdir(‘123’);
输出结果: 删除 1.txt

151.copy(): 拷贝文件 拷贝文件
echo copy(“source.txt”,“target.txt”);
输出结果: 1

152.rename(): 重命名一个文件或目录 重命名一个文件或目录
rename(“images”,“pictures”);
输出: 如果成功则返回 TRUE,失败则返回 FALSE

二十二、 文件的上传与下载
153.is_uploaded_file():过 判断文件是否是通过 HTTP POST 上传的 上传的
f i l e = " t e s t . t x t " ; i f ( i s u p l o a d e d f i l e ( file = "test.txt"; if(is_uploaded_file( file="test.txt";if(isu​ploadedf​ile(file)){ echo (“KaTeX parse error: Expected 'EOF', got '}' at position 35: …a HTTP POST"); }̲ else{ echo ("file is not uploaded via HTTP POST”); }
输出结果:test.txt is not uploaded via HTTP POST

154.move_uploaded_file(): 将上传的文件移动到新位置 将上传的文件移动到新位置
if(is_uploaded_file(KaTeX parse error: Expected '}', got 'EOF' at end of input: …_uploaded_file(_FILES[‘bus’][‘tmp_name’], KaTeX parse error: Expected '}', got 'EOF' at end of input: … /><img src="'.NewPath.’">’;
}else{ exit(‘失败’);
}
}else{ exit(‘不是上传文件’);
}

二十三、时间函数
155.time(): 的 返回当前的 Unix 时间戳 time();
t = t i m e ( ) ; e c h o ( t=time(); echo( t=time();echo(t . “
”);
echo(date(“Y-m-d”,$t));
输出结果: 1494396195
2017-05-10(返回自从 Unix 纪元(格林威治时间 1970 年 1 月 1 日
00:00:00)到当前时间的秒数)

156.mktime(): 的 取得一个日期的 Unix 时间戳 时间戳 ,使用它来查找该日期的天
echo "Oct 3, 1975 was on a ".date(“l”, mktime(0,0,0,10,3,1975));
输出结果:Oct 3, 1975 was on a Friday

156.date(): 格式化一个本地时间/日期 格式化一个本地时间/日期
echo date("Y-m-d h:i:s ");
输出: 2017-05-10 06:11:06

157.checkdate(): 验证一个格里高里日期 验证一个格里高里日期
var_dump(checkdate(12,31,-400));
echo “
”;
var_dump(checkdate(2,29,2003));
echo “
”;
var_dump(checkdate(2,29,2004));
输出结果:bool(false)
bool(false)
bool(true)

158.date_default_timezone_set(): 设定用于一个脚本中所有日期时间函数的默认时区 设定用于一个脚本中所有日期时间函数的默认时区
date_default_timezone_set(‘PRC’);

159.getdate(): 取得日期/时间信息 取得日期/时间信息
print_r(getdate());
输出结果: Array ( [seconds] => 42 [minutes] => 18 [hours] => 6 [mday]
=> 10 [wday] => 3 [mon] => 5 [year] => 2017 [yday] => 129 [weekday] =>
Wednesday [month] => May [0] => 1494397122 ) ( 返回一个根据 timestamp 得出
的包含有日期信息的关联数组。如果没有给出时间戳则认为是当前本地时间 )

160.strtotime(): 为 将任何英文文本的日期时间描述解析为 Unix 时间戳 时间戳
echo strtotime(“now”);
输出结果:1494397277

161.microtime(): 前 返回当前 Unix 时间戳和微秒数 时间戳和微秒数
echo(microtime());
输出结果: 0.00806100
1494398062

二十四、其他常用:
162.intval(): 获取变量的整数值 获取变量的整数值
echo intval(0.99);
变量转成整数类型
输出结果:0(向下取整)

163.PDO 数 类的相关函数 prepare() execute() fetch()

<?php$driver = 'mysql'; $database = "dbname=CODINGGROUND"; $dsn = "$driver:host=localhost;unix_socket=/home/cg/mysql/mysql.sock;$database"; $username = 'root'; $password = 'root';try { $conn = new PDO($dsn, $username, $password); echo "

Database CODINGGROUND Connected

"; }catch(PDOException $e){ echo "

" . $e->getMessage() . "

"; } $sql = 'SELECT * FROM users'; $stmt = $conn->prepare($sql); $stmt->execute(); echo ""; while($row = $stmt->fetch(PDO::FETCH_ASSOC)){ echo ""; foreach($row as $value){ echo sprintf("", $value); } echo ""; }echo "

%s

";?>

  1. 正则表达式-元字符 元字符
    元字符及其匹配范围
    \d 匹配任意一个十进制数字,等价于: [0-9]
    \D 匹配除十进制数字以外的任意数字,等价于: [^0-9]
    \s:匹配空白字符,等价于: [\n\f\r\t\v]
    \S: 匹配除空白字符以外的任意一个字符, 等价于[^\n\f\r\t\v]
    \w 匹配任意一个数字、字母和下划线,等价于: [0-9a-zA-Z_]
    \W 匹配除字母、数字和下划线以外的任意字符, 等价于: [^0-9a-zA-Z_]
    []:1)用来表示范围。2)匹配任意一个中括号中定义的原子
    [^]: 中括号里面的^(抑扬符):表示匹配任意一个除中括号里面定义的原子
    限定次数
  • 匹配 0 次、1 次或多次其前的原子, 等价于: {0,}
  • 匹配 1 次或多次其前的原子, 等价于: {1,}
    ? 匹配 0 次或 1 次其前的原子, 等价于: {0,1}
    {n} 表示其前的原子正好出现 n 次, 等价于: {n,} 表示其前的原子至少出现 n 次,最多不限制
    {m,n} 表示其前的原子最少出现 m 次,最多出现 n 次
    其它
    . 匹配除换行符(\n)以外的任意字符【windows 下还匹配\f\r】 | 两个或多个分支选择【优先
    级最低】
    ^ 匹配输入字符的开始位置
    $ 匹配输入字符的结束位置
    \b 匹配词边界
    \B 匹配非词边界
    () 1)模式单元,把多个小原子组成一个大原子。2)可以改变优先级

165.序列化
serialize
unserialize
json_encode 对变量进行 JSON 编码
json_decode 对JSON 格式的字符串进行编码

166.编码
base64_encode 本函数将字符串以 MIME BASE64 编码。在 BASE64 编码后的字符串只包含英文字母大小写、阿拉伯数字、加号与反斜线,共 64 个基本字符,不包含其它特殊的字符,因而才取名 BASE64。

base64_decode 解码

167.回调函数
1.array_filter( a r r , " f u n c t i o n " ) ; / / 把 arr,"function");//把 arr,"function");//把arr放到函数function中处理,【返回判断为TRUE的数据组成新数组,键值保留】
2.array_walk( a r r , " f u n c t i o n " [ , " d a t a " ] ) ; / / 把 arr,"function"[,"data"]);//把 arr,"function"[,"data"]);//把arr放到function(& v , v, v,k, d a t a ) 中 处 理 【 返 回 值 为 b o o l 】 3. a r r a y m a p ( " f u n c t i o n " , data)中处理【返回值为bool】 3.array_map("function", data)中处理【返回值为bool】3.arraym​ap("function",arr, a r r 2 , arr2, arr2,arr3,…);//把所有数组返回到回调函数统一处理,【返回数组】
4.array_reduce( a r r , m y f u n c t i o n [ , i n i t i a l ] ) : 把 一 维 数 组 arr,myfunction[,initial]):把一维数组 arr,myfunction[,initial]):把一维数组arr中的值依次传到自定义函数myfunction( v 1 , v1, v1,v2)的v2上,v1为累加值类似于( .= ),[如果有initial,先把其当v1传进去]【返回字符串】

################################################################GIT#################################################################

一、git客户端(本地仓库)的一些操作
1.设置账户(需要和github账户设置一致)
git config --global user.name xxx
git config --global user.email xxx@foxmail.com

2.查看设置
git config --list
user.name=xxx
user.email=xxx@foxmail.com

3.创建git本地仓库
git init
此时会出现提示 : inialized empty Git repository in d://com/liu/.git

4.查看git状态
git status
一般来说会显示需要提交的文件(uncommited)和未追踪的文件(untracked)
uncommited:已有的,刚被修改尚未提交的
untracked:原先没有的,新建的

5.添加git文件到暂存区(需要和版本库区分)
git add

6.git提交文件
git commit -m “add a function in test.java”
-m表示注释,为提交时的说明,必须要有!

7.git删除文件(夹)
git rm test.txt //删除文件
git rm -r filebook //删除文件夹
git rm和直接删除的区别在于git rm会将此文件的操作记录删除,而直接删除仅仅是删除了物理文件,没有删除和此文件相关的记录。git rm后会在版本库产生区别(有操作日志),而直接删除没有。
可以用下面两种操作在版本库中删除文件:
git rm test.txt => git commit -m ‘delete a file’
rm test.txt => git commit -am ‘delete a file’
注意:命令git rm用于删除一个文件。如果一个文件已经被提交到版本库,那么你永远不用担心误删,但是要小心,你只能恢复文件到最新版本,你会丢失最近一次提交后你修改的内容。

8.git操作日志
git log --decorate --graph --oneline --all #显示当前及之前的版本号
git log --pretty=oneline #将版本历史显示为一行,历史版本号全部显示
git log --pretty=oneline --abbrev-commit #将版本历史显示为一行,历史版本号部分显示
git log --graph #查看分支合并图

9.版本回退
执行版本退回后,本地工作区的内容会自动和回退到的版本库版本的内容保持同步
git reset --hard HEAD^ 回退到上一个版本
git reset --hard HEAD^^ 回退到上上个版本,以此类推,一次提交即为一个版本
git reset --hard e9efa77 回退到 e9efa77 版本

10.git还原操作
丢弃工作区的操作,但不会丢失暂存区的操作(add操作能将更改添加到暂存区),实际上就是用版本库里的版本替换工作区的版本,无论工作区是修改还是删除,都可以“一键还原”
git checkout – readme.txt

11.git暂存区撤销操作
工作区修改了文件,而且执行了add,但还没执行commit,暂存区还是可以撤销的
git reset HEAD readme.txt
备注:git reset命令既可以回退版本,也可以把暂存区的修改回退到工作区。当我们用HEAD时,表示最新的版本。

二.与github/gitee协同使用(git代码托管服务器)
和GitHub相比,码云(Gitee)也提供免费的Git仓库。此外,还集成了代码质量检测、项目演示等功能。对于团队协作开发,码云还提供了项目管理、代码托管、文档管理的服务,5人以下小团队免费。

1.配置远程仓库免密登陆
(1)在用户主目录下,看看有没有.ssh目录,如果有,再看看这个目录下有没有id_rsa和id_rsa.pub这两个文件,如果已经有了,可直接跳到下一步。如果没有,打开Shell(Windows下打开Git Bash),创建SSH Key:ssh-keygen -t rsa -C “xxx@foxmail.com”
备注:一路回车,执行生成 id_rsa 私钥 和 id_rsa.pub 公钥,Windows用户在git bash中输入上述指令
(2)获得key的内容,复制下来,添加到gitHub的SSH key中
windows位置:‪C:\Users\用户名.ssh\id_rsa.pub
Linux位置:cat ~/.ssh/id_rsa.pub

(3)ssh -T git@github.com #验证key,根据提示输入yes,添加为信任主机
或者ssh -T git@git.oschina.net

2.添加远程仓库
git remote add origin https://github.com/xxx/LearnGit.git(https方式)
(ssh方式)
此处可以为https地址也可以是ssh地址,orign为设置的远程仓库的别名,强烈建议使用ssh方式,因为https方式每次都要输入用户名和密码
如果需要修改传输协议:
(1)git remote rm <远程主机名>(删除远程仓库)
(2)设置传输方式和目标远程仓库
(3)git push -u <远程主机名> <本地分支名>

码云的添加远程仓库方法:
git remote add origin git@gitee.com:xxx/LearnGit.git(ssh方式)
如果git remote add失败,并报错:fatal: remote origin already exists.
说明本地库已经关联了一个名叫origin的远程库,此时,可以先用git remote -v查看远程库信息:
origin git@github.com:xxx/LearnGit.git (fetch)
origin git@github.com:xxx/LearnGit.git (push)
表示本地库已经关联了Github上的origin远程库,需要先删除已有的Github库:
git remote remove origin
再关联码云的远程库(注意路径中需要填写正确的用户名):
git remote add gitee git@gitee.com:xxx/LearnGit.git

因为git本身是分布式版本控制系统,可以同步到另外一个远程库,当然也可以同步到另外两个远程库,所以一个本地库可以既关联GitHub,又关联码云!
使用多个远程库时,要注意git给远程库起的默认名称是origin,如果有多个远程库,我们需要用不同的名称来标识不同的远程库。仍然以learngit本地库为例,先删除已关联的名为origin的远程库:
git remote rm origin
然后,先关联GitHub的远程库:
git remote add github git@github.com:xxx/LearnGit.git
注意,远程库的名称叫github,不叫origin了。
接着,再关联码云的远程库:
git remote add gitee git@gitee.com:xxx/LearnGit.git
同样注意,远程库的名称叫gitee,不叫origin。
现在,我们用git remote -v查看远程库信息,可以看到两个远程库:gitee git@gitee.com:xxx/LearnGit.git (fetch)
gitee git@gitee.com:xxx/LearnGit.git (push)
github git@github.com:xxx/LearnGit.git (fetch)
github git@github.com:xxx/LearnGit.git (push)
如果要推送到GitHub,使用命令:
git push github master
如果要推送到码云,使用命令:
git push gitee master
这样一来,本地库就可以同时与多个远程库互相同步:

3.查看远程仓库及传输协议
git remote
git remote -v 查看名称和详细地址

4.删除远程仓库
git remote remove <远程主机名>

5.推送本地分支到远程仓库
git push <远程主机名> <本地分支名>:<远程分支名>
如果省略远程分支名,则表示将本地分支推送与之存在“追踪关系”的远程分支(通常两者同名),如果该远程分支不存在,则会被新建。
git push origin <本地分支名>
git push origin master
如果当前分支与多个主机存在追踪关系,则可以使用-u选项指定一个默认主机,这样以后就可以不加任何参数使用git push。
git push -u <远程主机名> <本地分支名> 例如:git push -u origin master

6.将远程仓库克隆为本地仓库
git clone git@github.com:xxx/LearnGit.git
注意:
(1)不能使用别名
(2)默认情况下,从远程clone到本地的库只能看到master分支,如果要将远程的分支同步到本地:
git checkout -b <本地分支名> <远程主机名>/<远程分支名>
前提是远程<远程主机名>必须存在名为<远程分支名>的分支,而且<本地分支名>和<远程分支名>最好一致。

7.本地仓库更新
将远程存储库中的更改合并到当前分支中。在默认模式下,git pull是git fetch后跟git merge FETCH_HEAD的缩写。更准确地说,git pull使用给定的参数运行git fetch,并调用git merge将检索到的分支头合并到当前分支中。 使用–rebase,它运行git rebase而不是git merge。
以下是一些示例:
git pull <远程主机名> <远程分支名>:<本地分支名>
比如,要取回origin主机的next分支,与本地的master分支合并,需要写成下面这样 -
git pull origin next:master
如果远程分支(next)要与当前分支合并,则冒号后面的部分可以省略。上面命令可以简写为:
git pull origin next
上面命令表示,取回origin/next分支,再与当前分支合并。实质上,这等同于先做git fetch,再执行git merge。
git fetch origin => git merge origin/next
在某些场合,Git会自动在本地分支与远程分支之间,建立一种追踪关系(tracking)。比如,在git clone的时候,所有本地分支默认与远程主机的同名分支,建立追踪关系,也就是说,本地的master分支自动“追踪”origin/master分支。Git也允许手动建立追踪关系:
git branch --set-upstream-to=远程主机名/<远程分支名> <本地分支名>
比如git branch --set-upstream-to=origin/next master,指定master分支追踪origin/next分支。
git pull origin
上面命令表示,本地当前分支自动与对应的origin主机”追踪分支”(remote-tracking branch)进行合并。
如果当前分支只有一个追踪分支,连远程主机名都可以省略。
git pull
上面命令表示,当前分支自动与唯一一个追踪分支进行合并。
如果合并需要采用rebase模式,可以使用–rebase选项。
git pull --rebase <远程主机名> <远程分支名>:<本地分支名>

git fetch和git pull的区别
(1)git fetch:相当于是从远程获取最新版本到本地,不会自动合并。
git fetch origin mastergit log -p master…origin/mastergit merge origin/master
以上命令的含义:
首先从远程的origin的master主分支下载最新的版本到origin/master分支上
然后比较本地的master分支和origin/master分支的差别
最后进行合并
上述过程其实可以用以下更清晰的方式来进行:
git fetch origin master:tmpgit diff tmp git merge tmp
(2)git pull:相当于是从远程获取最新版本并merge到本地
git pull origin master
上述命令其实相当于git fetch 和 git merge
在实际使用中,git fetch更安全一些,因为在merge前,可以查看更新情况,然后再决定是否合并。

8.查看分支
git branch

9.创建分支
git branch

10.创建并切换到分支
git checkout -b
备注:git checkout命令加上-b参数表示创建并切换,相当于以下两条命令
git branch git checkout

11.切换分支
git checkout
切换分支后,在git bash中显示为绿色

12.删除分支
git branch -d
如果分支没有合并,删除分支就表示会丢失修改,此时git无法使用-d删除,可使用-D强行删除
git branch -D

13.合并分支
git合并默认使用Fast forward模式,一旦删除分支,会丢掉分支信息,也就看不出来曾经做过合并
git merge #基于当前分支,合并另外一个分支,前提需要保证分支之间不冲突
如果强制禁用Fast forward模式,即普通模式,Git就会在merge时生成一个新的commit
git merge --no-ff -m “there is a comment”
因为本次合并要创建一个新的commit,所以加上-m参数,把commit描述写进去。
工作中,肯定需要不管有没有分支被删除,都要从分支历史上就查看所有的历史分支信息,所以要使用普通模式合并。

14.创建tag
(1)git tag #默认在HEAD版本
(2)对指定的commit版本创建tag
需要先找到历史commit的id
git log --pretty=oneline --abbrev-commit
然后对指定的commit创建tag:
git tag
(3)创建带有说明的tag,用-a指定标签名,-m指定说明文字
git tag -a -m “there is a tag description” []
(4)通过-s用私钥签名一个标签,签名采用PGP签名
git tag -s -m “there is a tag description” []
必须首先安装gpg(GnuPG),如果没有找到gpg,或者没有gpg密钥对,就会报错,参考GnuPG帮助文档配置Key。

15.查看tag
git tag #显示的tag不是按时间顺序排列,而是按字母顺序排列
如果想查看tag和commit的对应关系,可以用
git log --pretty=oneline --abbrev-commit
如果想查看tag的的详细情况,可以用
git show

16.删除tag
创建的标签都只存储在本地,不会自动推送到远程。所以,打错的标签可以在本地安全删除:
git tag -d
如果标签已经推送到远程,要删除远程标签就麻烦一点:
(1)先本地删除:git tag -d
(2)再远程删除:git push origin :refs/tags/

17.推送标签至远程
git push origin
或者,一次性推送全部尚未推送到远程的本地标签:
git push origin --tags

18.现场的保存与恢复
git stash #将目前的工作现场保存
git stash list #查看所有保存的工作现场
工作现场还在,Git把stash内容存在某个地方了,但是需要恢复一下,有两个办法:
一是用git stash apply stash@{0}恢复,但是恢复后,stash内容并不删除,你需要用git stash drop stash@{0}来删除;
另一种方式是用git stash pop,恢复的同时把stash内容也删了,这种方式省时省力
注意点:
(1)如果在分支下新建文件,而尚未执行add操作,stash无法将新文件纳入保存的现场,因为stash只对被修改的被追踪的文件和暂存的变更有效,对于新文件必须先执行add。
(2)如果修改分支下的已被追踪的文件,不管有没有对修改的文件进行add操作,如果执行stash,所有修改会被纳入保存的现场,而文件会恢复成修改前的状态。恢复现场后,文件又呈现被修改后的状态。特别的是,如果修改的文件在stash前已经被add了,恢复现场后,暂存区的内容就会清空,相当于这个文件从未被add一样。

19.设置Git UI颜色
让Git显示颜色,会让命令输出看起来更醒目
git config --global color.ui true

20.忽略特殊文件
(1)在Git工作区的根目录下创建一个特殊的.gitignore文件,然后把要忽略的文件名填进去,Git就会自动忽略这些文件。不需要从头写.gitignore文件,GitHub已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览:https://github.com/github/gitignore
忽略文件的原则是:
忽略操作系统自动生成的文件,比如缩略图等;
忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
比如一个完成的.gitignore文件,内容如下:

Windows:Thumbs.dbehthumbs.dbDesktop.ini

Python:.py[cod].so*.egg*.egg-infodistbuild


(2)把.gitignore也提交到Git
git add .gitignore
git commit -m “there is a description”
就完成了!当然检验.gitignore的标准是git status命令是不是显示working tree clean。
使用Windows的注意:如果在资源管理器里新建一个.gitignore文件,系统会非常弱智地提示必须输入文件名,但是在文本编辑器里“保存”或者“另存为”就可以把文件保存为.gitignore了。

(3)如果确实想要添加已经被.gitignore忽略的文件,可以用-f强制添加到Git
git add -f test.class

(4)怀疑.gitignore写的有问题,需要查找哪个规则写错了,可以用git check-ignore命令检查:
git check-ignore -v App.class.gitignore:3:*.class App.class
表示.gitignore的第3行规则忽略了App.class这个文件,于是我们就可以知道应该修订哪个规则。

21.为命令配置别名
(1)命令可以简写,用git st表示git status,再比如用co表示checkout、ci表示commit、br表示branch:
git config --global alias.co checkoutgit config --global alias.ci commitgit config --global alias.br branch
以后提交就可以简写成:
git ci -m “there is a description”
–global参数是全局参数,也就是这些命令在这台电脑的所有Git仓库下都有用。

(2)命令git reset HEAD 可以撤销暂存区的修改(unstage),重新放回工作区。既然是一个unstage操作,就可以配置一个unstage别名:
git config --global alias.unstage ‘reset HEAD’
就可以简化命令:
git unstage test.py = git reset HEAD test.py

(3)配置一个git last,让其显示最后一次提交信息:
git config --global alias.last ‘log -1’
这样,用git last就能显示最近一次的提交:
git lastcommit 015851cbe2902bf01fbba198af5d6705dc0e03ac (HEAD -> dev)
Author: xxx xxx@foxmail.com
Date: Mon Apr 23 13:52:44 2018 +0800
add git ignore list
(4)还有把lg配置成了:
git config --global alias.lg “log --color --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ --abbrev-commit”
来看看git lg的效果:

22.修改配置文件
配置Git的时候,加上–global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用。
每个仓库的Git配置文件都放在.git/config文件中:
cat .git/config

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[branch “master”]
[branch “dev”]
[remote “github”]
url = git@github.com:xxx/LearnGit.git
fetch = +refs/heads/:refs/remotes/github/
[remote “gitee”]
url = git@gitee.com:xxx/LearnGit.git
fetch = +refs/heads/:refs/remotes/gitee/

而当前用户的Git配置文件放在用户主目录下的一个隐藏文件.gitconfig中:

[user]
name = xxx
email = xxx@foxmail.com
[gpg]
program = C:\Program Files (x86)\gnupg\bin\gpg.exe
[color]
ui = true
[alias]
co = checkout
ci = commit
br = branch
last = log -1
lg = log --color --graph --pretty=format:’%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr) %C(bold blue)<%an>%Creset’ --abbrev-commit

别名就在[alias]后面,要删除别名,直接把对应的行删掉即可。配置别名也可以直接修改这个文件,如果改错了,可以删掉文件重新通过命令配置。

多人协作的工作模式通常如下:
(1)首先将远程仓库克隆为本地仓库
git clone git@github.com:xxx/LearnGit.git
(2)在本地创建和远程分支对应的分支
git checkout -b <本地分支名> origin/<远程分支名>
本地和远程分支的名称最好一致;
(3)在本地分支完成任务后,可以试图用git push <远程主机名> <本地分支名>推送自己的修改;
(2)如果推送失败,则表明远程分支比本地更新,需要先用git pull试图合并;
(3)如果pull失败并提示“no tracking information”,则说明本地分支和远程分支的链接关系没有创建,用命令git branch --set-upstream-to=<远程主机名>/<远程分支名> <本地分支名>创建链接;
(4)如果合并有冲突,则解决冲突,并在本地提交(add => commit);
(5)没有冲突或者解决掉冲突后,再用git push <远程主机名> <本地分支名>推送就能成功。

##############################################################REDIS##################################################################

doc 环境下使用命令:

keys 命令?    匹配一个字符*    匹配任意个(包括0个)字符[]    匹配括号间的任一个字符,可以使用 "-" 符号表示一个范围,如 a[b-d] 可以匹配 "ab","ac","ad"\x    匹配字符x,用于转义符号,如果要匹配 "?" 就需要使用 \?判断一个键值是否存在exists key如果存在,返回整数类型 1 ,否则返回 0删除键del key [key.....]可以删除一个或多个键,返回值是删除的键的个数注意:不支持通配符删除获得键值的数据类型type key返回值可能是 string(字符串类型) hash(散列类型) list(列表类型) set(集合类型) zset(有序集合类型)赋值与取值set key value       赋值get key             取值递增数字incr key当存储的字符串是整数形式时,redis提供了一个使用的命令 incr 作用是让当前的键值递增,并返回递增后的值incr num当要操作的键不存在时会默认键值为 0  ,所以第一次递增后的结果是 1 ,当键值不是整数时 redis会提示错误增加指定的整数incrby key incrementincrby 命令与 incr 命令基本一样,只不过前者可以通过 increment 参数指定一次增加的数值如:incrby num 2incrby num 3减少指定的整数decr keydecrby key incrementdesc 命令与incr 命令用法相同,只不过是让键值递减decrby 命令与 incrby命令用法相同增加指定浮点数incrbyfloat key incrementincrbyfloat 命令类似 incrby 命令,差别是前者可以递增一个双精度浮点数,如:incrbyfloat num 2.7注意: ( 受reids 版本限制,版本需要大于 2.6 版本)向尾部追加值append key value作用是向键值的末尾追加 value ,如果键不存在则将改键的值设置为 value,即相当于 set key value。返回值是追加后字符串的长度如:append foo " hello word!"获取字符串长度strlen key返回键值的长度,如果键不存在则返回0同时 获得/设置 多个键值mget key [key.....]mset key value [key value .......]位操作getbit key offsetsetbit key offset valuebitcount key [strart] [end]bitop operation destkey key [key .....]一个字节由8个二进制位组成,redis 提供了4个命令直接对二进制位进行操作getbit 命令可以获得一个字符串类型键指定位置的二进制位的值(0 或 1),索引从 0 开始,如果需要获取的二进制位的索引超出了键值的二进制位的实际长度则默认位值是 0setbit 命令可以设置字符串类型键指定位置的二进制位的值,返回值是该位置的旧值,如果需要设置的位置超过了键值的二进制位的长度,setbit 命令会自动将中间的二进制位设置为0,同理设置一个不存在的键的指定二进制位的值会自动将其前面的位赋值为 0bitcount 命令可以获得字符串类型键中值是1的二进制位个数,可以通过参数来限制统计的字节范围,如我们希望统计前两个字节(即"aa")  命令:bitcount foo 0 1    注意: ( 受reids 版本限制,版本需要大于 2.6 版本)bittop 命令可以对多个字符串类型键进行位运算,并将结果存储在destkey参数指定的键中。该命令支持的运算操作有 AND、 OR、  XOR、 NOT,如我们对bar 和 aar 进行 OR 运算操作:set foo1 barset foo2 aarbitop OR res foo1 foo2get res注: ( 受reids 版本限制,版本需要大于 2.6 版本)

散列类型

赋值与取值hset key field valuehget key fieldhmset key field value [ field value ...... ]hmget key field [ field ...... ]hgetall keyhset 命令用来给字段赋值,而hget命令用来获得字段的值hset 命令的方便之处在于不区分插入和更新操作,这意味着修改数据时不用事先判断字段是否存在来决定要执行的是插入操作还是更新操作,当执行的是插入操作时, hset 命令返回 1 ,当执行的是更新操作时,hset 命令返回的是 0,当键本身不存在时, hset 命令还会自动建立他hmset 设置多个键值hmget 获得多个键值hgetall 获取键中所有字段和字段值却不知道键中有哪些字段时使用,返回的结果是字段和字段值组成的列表判断字段是否存在hexists key field存在返回 1 ,否则返回 0当字段不存在时赋值hsetnx key field valuehsetnx 命令与hset 命令类似,区别在于如果字段已经存在,hsetnx 命令将不执行任何操作增加数字hincrby key field increment使字段值增加指定的整数删除字段hdel key field [ field .....]删除一个或多个字段,返回值是被删除的字段个数只获取字段名或字段值hkeys keyhvals keyhkeys 获取所有字段的名字hvals 获得键中所有字段的值获得字段数量hlen key

列表类型

向列表两端增加元素lpush key value [ value ....... ]rpush key value [ value ....... ]lpush 命令用来向列表左边增加元素,返回表示增加元素后列表的长度rpush 命令用来向列表右边增加元素,返回表示增加元素后列表的长度从列表两端弹出元素lpop keyrpop keylpop 命令可以从列表左边弹出一个元素,lpop 命令执行两步操作,1:将列表左边的元素从列表中移除,2:返回被移除元素值rpop 命令可以从列表右边弹出一个元素获取列表中元素个数llen key当键不存在时,llen 返回 0获得列表片段lrange key start stop获得列表中的某一片段,返回索引从 start 到 stop 之间的所有元素(包括两端的元素) 索引开始为 0注:lrange 与很多语言中用来截取数组片段的方法有一点区别是 lrange 返回的值包含最右边的元素lrange 命令也支持负索引,表是从右边开始计算序数,如 ' -1 ' 表示最右边第一个元素, ' -2 ' 表示最右边第二个元素,一次类推删除列表中指定的值lrem key count valuelrem 命令会删除列表中前 count 个值为 value 的元素,返回值是实际删除的元素个数。根据count 值的不同,lrem 命令执行的方式会略有差异当 count > 0 时,lrem 命令会从列表左边开始删除前 count 个值为 value 的元素当 count < 0 时,lrem 命令会从列表右边开始删除前count 个值为 value 的元素当 count = 0 时,lrem 命令会删除所有值为value的元素获得 / 设置 指定索引的元素值lindex key indexlset key index valuelindex 命令用来返回指定索引的元素,索引从 0 开始 ,如果 index 是负数则表示从右边开始计算的索引,最右边元素的索引是 -1lset 是通过索引操作列表的命令,它会将索引为 index 的元素赋值为 value只保留列表指定片段ltrim key start endltrim 命令可以删除指定索引范围之外的所有元素,其指定列表范围的方法和 lrange 命令相同ltrim 命令常和 lpush 命令一起使用来限制列表中元素的数量,比如记录日志时我们希望只保留最近的 100 条日志,则每次加入新元素时调用一次ltrim 命令即可;向列表中插入元素linsert key before | after pivot valuelinsert 命令首先会在列表中从左到右查找值为 pivot 的元素,然后根据第二个参数是 before 还是 after 来决定将 value 插入到该元素的前面还是后面,如果命令执行成功,返回插入操作完成之后列表的长度。如果没有找到 pivot 返回 -1 如果key 不存在或为空,返回 0将元素从一个列表转到另一个列表Rrpoplpush source destinationrpoplpush 先执行 rpop 命令在执行 lpush 命令。rpoplpush 命令先会从source 列表类型键的右边弹出一个元素,然后将其加入到 destination 列表类型键的左边,并返回这个元素的值,整个过程是原子的

集合类型
增加删除命令
sadd key member [ member … ]
srem key member [ member … ]
sadd 命令用来向集合中增加一个或多个元素,如果键不存在则会自动创建。因为在一个集合中不能有相同的元素,所以如果要加入的元素已经存在与集合中就会忽略这个元素。返回值是成功加入的元素数量(忽略的元素不计算在内)
srem 命令用来从集合中删除一个或多个元素,并返回删除成功的个数

获得集合中的所有元素smembers key返回集合中的所有元素判断元素是否在集合中sismember key member判断一个元素是否在集合中是一个时间复杂度为 0(1) 的操作,无论集合中有多少个元素, sismember 命令始终可以极快的返回结果。当值存在时 sismember 命令返回 1 ,当值不存在或者键不存在时返回 0集合间运算sdiff key [ key ...... ]sdiff 命令用来对多个集合执行差集运算。集合 A 与集合 B 的差集表示为 A- B ,代表所有属于 A 且不属于 B 的元素构成的集合,即 A - B = { x| x∈A  且 x ∈/B }命令使用方法:sadd seta 1 2 3 4 6 7 8sadd setb 2 3 4sdiff seta setb该命令支持同时传入多个键, 计算顺序是先计算 seta 和 setb 在计算结果与 setc 的差集sadd setc 2 3 4sdiff seta setb setcsinter key [ key ..... ]该命令用来对多个集合执行交集运算。集合 A 与集合 B 的交集表示为 A∩B,代表所有属于 A 且属于 B 的元素构成的集合即 A∩B = { x| x∈A  且 x ∈B }命令使用方法:sinter seta setb该命令同样支持同时传入多个键sunion key [ key ...... ]该命令用来对多个集合执行并集运算。集合 A 与集合 B的并集表示为 A∪B ,代表所有属于A或所有属于B的元素构成的集合即  A∪B = { x| x∈A  或 x ∈B }命令使用方法:sunion seta setb该命令同样支持同时传入多个键获得集合中元素的个数scard key进行集合运算并将结果存储sdiffstore destination key [ key ...... ]sinterstore destination key [ key ...... ]sunionstore destination key [ key ...... ]sdiffstore 命令和 sdiff 命令功能一样,唯一的区别就是前者不会直接返回运算的结果,而是将结果存在 destination 键中sinterstore 这个命令类似于 sinter 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。sunionstore 这个命令类似于 sunion 命令,但它将结果保存到 destination 集合,而不是简单地返回结果集。随机获得集合中的元素srandmember key [ count ]该命令用来随机从集合中获取一个元素还可以传递 count 参数来一次随机获得多个元素,根据 count 的正负不同,具体表现也不同当count为正数时,srandmember 会随机获取从集合里获得count个不重复的元素。如果count的值大于集合中的元素个数,则srandmember 会返回集合中的全部元素当count为负数时,srandmember 会随机从集合中获得count个的元素,这些元素有可能相同注:当传递count 参数时,在windows环境下提示命令参数错误从集合中弹出一个元素spop key由于集合类型的元素是无序的,所以 spop 命令会从集合中随机选择一个元素弹出,返回值为被移除的随机元素,如果 key 不存在或者key 为空集时,返回 nil

有序集合类型(sorted set)
增加元素
zadd key score member [ score member … ]
zadd 命令用来向有序集合中加入一个元素和该元素的分数,如果该元素已经存在,则会用新的分数替换原有的分数。zadd命令的返回值是新加入到集合中的元素个数(不包含之前已经存在的元素)

    获得元素的分数zscore key member获得排名在某个范围的元素列表zrange key start stop [ withscores ]zrevrange key start stop [ withscores ]zrange 命令会按照元素分数从小到大的顺序返回索引从 start 到 stop 之间的所有元素(包含两端的元素)。zrange 命令和 lrange 命令十分相似,如索引都是从0开始,负数代表从后向前查找(-1 表示最后一个元素)。如果需要同时获得元素的分数的话,可以在zrange 命令的尾部加上 widthscores 参数注:如果两个元素的分数相同,redis会按照字典顺序(即 0<9<A<Z<a<z 这样的顺序)来进行排列。如果元素的值是中文,则取决于中文的编码方式,如图:zrevrange 命令和 zrange 的唯一不同在于 zrevrange 是按照元素分数从大到小的顺序给定结果的获得指定分数范围内的元素zrangebyscore key min max [ withscores ] [ limit offset count ]该命令按照元素分数从小到大的顺序返回分数在 min 到 max 之间(包含 min 和max 的元素)如果希望分数范围不包含端点值,可以在分数前加上 "(" 符号,例如:希望返回80分到100分的的数据,可以包含80分单不包含100分命令:zrangebyscore scoreboard 80 (100 widthscores min 和 max 还支持无穷大,同 zadd 命令一样,-inf 和 +inf 分别表示负无穷大和正无穷大。比如希望得到所有分数高于 80分(不包含80分)的人的名单,但是却不知道最高分是多少,这是就可以使用 +inf zrangebyscore scoreboard (80 +inf 命令 limit offset count 与 SQL 中的用法基本相同,即在获得的元素列表的基础上向后偏移 offset 个元素并且只获取前count个元素 zrevrangebyscore 不仅是按照元素分数从大往小的顺序给出结果,而且他的 min 和max 的参数的顺序和 zrangebyscore 命令是相反的增加某个元素的分数zincrby key increment memberzincrby 命令可以增加一个元素的分数,返回值是更改后的分数,例如想给peter 加 4 分zincrby scoreborder 4 peterincrement  也可以是负数表示减分zincrby scoreborder -4 peter如果指定元素不存在,redis 在执行命令前会先建立它并将他的值赋为0在执行操作        获得集合中元素的数量zcard key获得指定分数范围内的元素个数zcount key min maxzcount 命令的 min max 参数的特性与 zrangebyscore 命令中的一样            删除一个或多个元素zrem key member [ member .... ]zrem 命令的返回值是成功删除的元素数量(不包含本来就不存在的元素)按照排名范围删除元素zremrangebyrank key start stop按照元素分数从小到大的顺序(即索引 0 表示最小的值)删除在指定排名范围内的所有元素,并返回删除元素的数量            按照分数范围删除元素zremrangebyscore key min maxzremrangebyscore 命令删除指定分数范围内的所有元素,参数 min 和 max 的特性和 zrangebyscore 命令中的一样,返回值是删除元素的个数            获得元素的排名zrank key memberzrevrank key memberzrank 命令会按照元素分数从小到大的顺序获得指定的元素排名(从 0 开始,即分数最小的元素排名为0)zrebrank 命令则正好相反,分数最大的元素排名为0计算有序集合的交集zinterstore destination numkeys key [ key ... ] [ weights weight [ weight ... ] ] [ aggregate SUM | MIN | MAX ]zinterstore 命令用来计算多个有序集合的交集病将结果存储在 destination 键中(同样以有序集合类型存储),返回值为 destination 键中元素的个数,destination 键中元素的分数是由 aggregate 参数决定的1. 当 aggregate 是 SUM (也就是默认值),destination 键中元素的分数是每个参与计算的集合中该元素分数的和2.当 aggregate 是 MIN 时,destination 键中元素的分数是参与计算的集合中该元素分数最小值3.当 aggregate 是 MAX 是,destination 键中元素的分数是参与计算的集合中该元素分数最大值zinterstore 命令还能通过 weights 参数设置每个集合的权重,每个集合在参与计算时元素的分数会被乘上该集合的权重如:计算集合间的并集zunionstore用法与 zinterstore 命令的用法一样

事务
事务的原理是先将属于一个事务的命令发送给redis ,然后再让 redis 依次执行这些命令

    错误处理(1)语法错误。语法错误指命令不存在或者命令参数个数不对。这种情况下,事务中只要有一个命令有语法错误,执行exec命令后redis就会直接返回错误,连语法正确的命令也不会执行。注:redis 2.6.5 之前的版本会忽略有语法错误的命令,然后执行事务中其他语法正确的命令。(2)运行错误。运行错误指在命令执行时出现的错误,比如使用散列类型的命令操作集合类型的键,这种错误在实际执行之前redis是无法发现的,所以在事务里这样的命令是会被redis接受并执行的,如果事务里的一条命令出现运行错误,事务里其他的命令依然会继续执行(包含出错命令之后的命令)reids的事务没有关系数据库事务提供的回滚功能,为此开发者必须在事务执行出错之后自己收拾剩下的摊子watch 命令watch key [ key ... ]监视一个或多个 key ,如果在事务执行之前这个或这些 key 被其他命令所改动,那么事务将被打断,监控一直持续到exec命令unwatch取消 watch 命令对所有 key 的监视生存时间expireexpire 命令的使用方法为 expire key seconds ,其中 seconds 参数表示键的生存时间,单位是秒,该参数必须是整数       命令返回 1表示设置成功,返回 0 则表示键不存在或设置失败如果想知道一个键还有多久会被删除,可以使用 ttl 命令。返回值是键的剩余时间(单位是秒),       如果想取消键的生存时间设置(即将键恢复成为永久的),可以使用 persist 命令。如果生存时间被成功清除则返回 1 。否则返回 0除了 persist 命令之外,使用 set 、getset 命令为键赋值也同时会清楚键的生存时间注: incr 、lpush、hset、zrem 命令均不会影像键的生存时间精确控制键的生存时间应该使用 pexpire 命令。该命令的单位是毫秒可以使用 pttl 命令以毫秒为单位返回键的剩余时间另外不太常用命令:expireat 和 pexpireat,该命令第二个参数表示键的生存时间的截至时间,expireat 单位秒 pexpireat 单位毫秒sort该命令可以对列表类型,集合类型,和有序集合类型键进行排序列表类型:       有序集合类型排序时,会忽略元素的分数,只针对元素的自身的值进行排序           除了可以排列数字外,sort 命令还可以通过 alpha 参数实现按照字典顺序排列非数字元素sort 命令的 desc 参数可以实现将元素按照从大到小的顺序排列sort 命令还支持 limit 参数来返回指定范围的结果,用法和sql 语句一样 limit offset count ,表示跳过前 offset 个元素并获取之后的 count 个元素sort 命令 by 参数,默认情况下, sort uid 直接按照 uid 中的值排序,通过 by 参数,可以让 uid 按照其他键的元素来排序user_level_* 是一个占位符,他先取出 uid 中的值,然后在用这个值来查找相应的键比如在对 uid 列表进行排序时, 程序就会先取出 uid 的值 1 、 2 、 3 、 4 , 然后使用 user_level_1 、 user_level_2 、 user_level_3 和   user_level_4 的值作为排序 uid 的权重。使用 get 选项,可以根据排序的结果来取出相应的键值        一个sort 命令中可以有多个 get 参数(而 by 参数只能有一个)       默认情况下 sort 命令会直接返回排序结果,如果希望保存排序结果,可以使用 store 参数,保存后键的类型为列表类型

php、git、redis函数合集相关推荐

  1. Python 数据分析三剑客之 NumPy(五):数学 / 算术 / 统计 / 排序 / 条件 / 判断函数合集

    CSDN 课程推荐:<Python 数据分析与挖掘>,讲师刘顺祥,浙江工商大学统计学硕士,数据分析师,曾担任唯品会大数据部担任数据分析师一职,负责支付环节的数据分析业务.曾与联想.亨氏.网 ...

  2. 【Python常用函数合集】clip函数、range函数等

    你应该听说过,应用Python,可以让你处理一天的重复工作量,缩短到几分钟甚至更短.从此解放上班时间,研究更多更有效率的工作方法.进一步提升工作效率,让工作更出彩.这不是广告,这是实锤图片.    本 ...

  3. SQL基础常用函数合集

    AVG avg()函数是一个聚合函数(聚合函数:对一组值执行计算并返回单一的值的函数,常见的有sum.max.min.count等),用于计算从select语句中返回的数值数据集的平均值. 牛客.SQ ...

  4. Python 函数合集:足足 68 个内置函数请收好

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 来源:pypypypy www.cnblogs.com/pypypy/p/12011506.h ...

  5. 函数平移口诀_呆哥数学函数合集——函数的图形变换来啦【4】

    函数图像变幻莫测哈哈哈 呆哥今天给你们整理的要点!注意查收! [电子档领取] 如果想要获取往期电子版讲义.数学笔记手写稿 可以加我微信:daigemath666备注:一轮复习讲义电子版或手写稿 4. ...

  6. 怎么理解回调函数? 回调函数合集

    网上查了一通,有点体会,特来分享与讨论. ******************************************************************************* ...

  7. php 求数组合集,PHP数组排序函数合集 以及它们之间的联系分析

    下边提到的几个数组函数的排序有一些共性:1 数组被作为排序函数的参数,排序以后,数组本身就发生了改变,函数的返回值为bool类型. 2 函数名中出现单a表示association,含义为,在按值排序的 ...

  8. Python函数合集:足足68个内置函数请收好!

    来源: https://www.cnblogs.com/pypypy/p/12011506.html 内置函数就是python给你提供的, 拿来直接用的函数,比如print.,input等.截止到py ...

  9. mem库系列函数合集(memset、memchr、memcmp、memcpy)

    关于Mem函数,网上五花八门,使初学者很容易迷失方向,笔者在这里做一个常用函数的总结.希望对读者起到些许帮助. 想了解Str系列函数的,请猛戳这里→Str系列函数大全 代码 //头文件:#includ ...

最新文章

  1. 关于 MongoDB 与 SQL Server 通过本身自带工具实现数据快速迁移 及 注意事项 的探究...
  2. java基于servlet的文件上传
  3. AngularJS 初始化加载流程
  4. 年度回顾:2018年的AI/ML惊喜及预测19年的走势(一)...
  5. 下载mysql镜像教程_docker下安装mysql镜像
  6. SAP Data Intelligence API如何获得Access Token - no authentication means found
  7. HDU 3974 Assign the task(dfs时间戳+线段树成段更新)
  8. builtins自定义_ng-repeat里创建的自定义指令
  9. contos6.5卸载php7,centos8 测地卸载php5.6 与卸载php7
  10. Android Service 生命周期
  11. 电脑尺寸大小在哪里看_科技资讯:电脑弹出本地计算机上的服务启动后停止的提示在哪里看...
  12. Exec l 中分列的作用
  13. linux 解压缩一个文件夹下所有的压缩文件
  14. 2021年下半年软考数据库系统工程师真题答案解析
  15. 折叠屏要来了,适配逼死 Android 开发?谷歌有办法!
  16. linux 网桥浅析
  17. idea修改主题和更换背景
  18. java弹弹球实验报告_Java程序设计实验报告2(弹球游戏)1
  19. 瑞典皇家理工学院计算机学什么,瑞典留学 皇家理工学院的学科设置
  20. 基于Linux下的VIC使用(1)VIC部分(Fortran版本)

热门文章

  1. Android聊天软件的开发(七)--聊天通信
  2. P1244 [NOI2000] 青蛙过河(普及-)
  3. 高新技术企业认定中涉及的领域有哪些?
  4. 十六进制相关(计算机存储十六进制负数、与十进制转换)
  5. 微软急疯了?部分用户称PC自动升级到Win10
  6. 拉格朗日多项式插值法 思路详解+详细代码
  7. 去掉python的花括号
  8. Excel转Json工具(支持GUI模式和命令行模式)
  9. 国内免费cdn汇总2023最新
  10. https是怎么进行证书验证