PHP自学笔记
(C/C++/JAVA功底,忽略面向对象总结)
/***********************************************************************************/
文件处理
/***********************************************************************************/
一、打开文件:fopen
例如:
二、写文件:fwrite
例如:
三、读文件:feof/fgets/fgetss/fetcsv/readfile/fpassthru/file/fread/fgetc
feof($fp) 是否读到文件尾
例如:
<span style="font-family:Comic Sans MS;font-size:14px;"> $DOCUMENT_ROOT = $_SERVER['DOCUMENT_ROOT'];
$fp = fopen("$DOCUMENT_ROOT",'wb'); // 一般属性都要加b,这是为了更大的移植性
错误检测处理:
$fp = @fopen("$DOCUMENT_ROOT",'wb');
if(!$fp){
xxxxxxxxxxxxxx
exit;
}</span>
二、写文件:fwrite
例如:
$outputstring = "xxxxxxxxxxxxxx";
fwrite($fp,$outputstring,strlen($outputstring));
三、读文件:feof/fgets/fgetss/fetcsv/readfile/fpassthru/file/fread/fgetc
feof($fp) 是否读到文件尾
fgets($fp,999):每次读取文件998B
fgetss($fp,999,'</br>');每次读取文件998B,过滤 </br>
fgetcsv($fp,100,"\t");从文件中读取一行,在有制表符的地方进行分行
readfile("xxx");一次读取一个文件送到浏览器中,返回一个数组
fpassthru($fp)同上,返回true faluse
nl2rd(fread($fp,filesize(xxxx)))
文件是否存在:file_exists()
删除一个文件:unlink("xxxxx")
关闭文件:fclose($fp)
文件定位:
rewind($fp)
fseek($fp,1,SEEK_CUR)
ftell();
文件锁:
flock($fp,LOCK_SH/EX/UN/NB)
/***********************************************************************************/
数组
/***********************************************************************************/
一、定义
count($arr)
统计数组的元素个数
定义一维数组:
<span style="white-space:pre"> </span>$arr = array("hello","world"); // arr[0] = "hello"
$arr = range(1,10) // arr[0-9] =0-9
$arr = array("song" => 5,"jiu"=> "hs" ); //arr["song"]=5
定义二维数组:
<span style="font-size:14px; white-space: pre;"> </span><span style="font-size:14px;">$arr = array(
array(),
array(),
array()
);</span>
二、遍历
2.1遍历一维数组: 注意每个数组第二次遍历之前需要 reset($arr)
<span style="font-size:14px;"><span style="white-space: pre;"> </span>for($i = 0; $i< 3; $i++){
echo $arr[$i];
}
foreach($arr as $cur){
echo $cur
}
while($temp = each($arr)){
echo $temp['key'].'-'$temp['value'];
}
while(list($key,$value) = each($arr)){
echo "$key - $value";
}</span>
2.2遍历二维数组
<span style="white-space:pre"> </span>for($row = 0; $row <3 ;$row++){
for($col = 0;$col<3;$col++){
echo "$arr[$row][$col]";
}
}
for($row = 0;$row<3;$row++){
echo $arr[$row]["key"]........
}
三、操作
3.1 +
$a = array("a" => "apple", "b" => "banana");
$b = array("a" => "pear", "b" => "strawberry", "c" => "cherry");
$c = $a + $b; ====> apple,banana,cherry
$c = $b + $a; ====>pear,starwberry,cherry
3.2 =
== 只比较value 不比较key,两个数组key的值是顺序排列即可且都一样。0==“0”
=== 所有的都比较
四、数组排序
sort 正常数组升序 rsort 降序
asort 关联型数组value升序 arsort 降序
ksort 关联型数组key升序 ksort 降序
array_reverse() 专门逆序 返回逆序后的数组
$number = array_reverse($numver);
自定义排序:
<span style="white-space:pre"> </span>function compare($x,$y){
if($x[1]==$y[1]]){
return 0;
}else if($x[1] < $y[1]]){
return -1;
}else{
return 1;
}
}
usort($arr,'compare');
uksort
五、操作数组的指针
each(), //单独each不用循环的时候,它是同时抓取 key以及value
current(),reset(),end(),next(),pos(),prev();
sizeof/count() // 计算数组的元素个数
array_count_values // 计算数组中元素个数出现的频率
extract(),它的主要作用是将数组展开,键名作为变量名,元素值为变量值,可以说为数组的操作提供了另外一个方便的工具,比方说,可以很方便的提取$_POST或者$_GET的元素,对表单提交上来的内容不能不用一一赋值,直接使用下面代码:
extract(array var_array,[, int extract_type],[,string prefix]);
例如:
<?php
$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array);
echo "\$a = $a; \$b = $b; \$c = $c";
?>
<?php
$a = 'Original';
$my_array = array("a" => "Cat","b" => "Dog", "c" => "Horse");
extract($my_array, EXTR_PREFIX_SAME, 'dup');
echo "\$a = $a; \$b = $b; \$c = $c; \$dup_a = $dup_a;";
?>
/***********************************************************************************/
字符串
/***********************************************************************************/
一、字符串的格式化
1.1 字符串的整理:chop,ltrim,trim
trim只格式化字符串末尾
ltrim从字符串左边开始格式化
rtrim从字符串右边开始格式化
1.2 格式化字符串以便显示
nl2br 用xhtml 的<br /> 替换 字符串中的换行符/n, 针对于浏览器是非常有用的
printf("%s",$str) // 指定什么类型输出
strtoupper() // 转换成大写
strtolower() // 转换成小写
ucfirst() // 将第一个单词大写
ucwords() // 将所有首字母大写
###重点###
1.3 格式化字符串以便存数SQL
单引号,双引号,反斜杠\, NULL
\ => \\
' => \'
" => \"
\\ => \\\\
addslashes() 会格式化成适合SQL语句的格式
Stripslashes() 会将是个SQL语句的格式转换成原本的格式
1.4 字符串分割explode(),implode(),join()
注意:如果域名大写的或者大小写混搭,这个函数就无法正常使用,那么就需要转换成全是小写或者全是大写的。
$str = explode('@',$email) // 将email分成了两部分,@之前存在str[0],@之后存在str[1]里面
// join 和 implode 类似
$arr = array('Hello','World!','Beautiful','Day!');
$str = implode(" ",$arr);
str = "Hello World! Beautiful Day!"
#分割效果最好的是strtok()
$string = "Hello world. Beautiful day today.";
$token = strtok($string, " ");
while ($token !== false)
{
echo "$token<br />";
$token = strtok(" ");
}
结果: Hello
world.
Beautiful
day
today.
// substr()
$str = 'woshihaoren';
substr($test,2) => "shihaoren"
substr($test,-3); => "ren"
substr($test,2,-3);=> "shihao"
1.5字符串的比较strcmp(),strcasecmp(),strnatcmp()
strcmp($str1,$str2) //区分大小写
=>
str1 == str2
return 0;
=>
str1 >
str2
return 1;
=>
str1 <
str2
return -1;
strcasecmp($str1,$str2) // 不区分大小写,其他与strcmp 完全一样
strnatcmp // "2" <"12"
1.6 查找字符串
strstr($str,'song'); //区分大小写!如果找到返回'somg',否则就返回-1。
stristr //不区分大小写,
strrchr(string,char) // 第二个参数规定要查找的字符。
strcasecmp($str1,$str2) // 不区分大小写,其他与strcmp 完全一样
strnatcmp // "2" <"12"
1.6 查找字符串
strstr($str,'song'); //区分大小写!如果找到返回'somg',否则就返回-1。
stristr //不区分大小写,
strrchr(string,char) // 第二个参数规定要查找的字符。
如果该参数是数字,则搜索匹配数字 ASCII 值的字符。
####strops替换strstr() 因为strops速度要比 strstr快很多
####strrpos反向查找
1.7 替换
str_replace(mixed needle,mixed new_needle,mixed haystack[,int &count]);//对大小写敏感,str_ireplace 无视大小写
用new_needle 替换了haystack中所有的needle, count是要执行替换的操作次数
#########count 是引用,所以可以作为带出参数!
二、正则表达式// 必须被包在 ' '里面
2.1 .at 可以与Cat,sat,mat等匹配
2.2 [a-z]at [] 里面是a-z的一个字符
2.3 [aedf] 范围是a,e,d,f
2.4 [a-zA-Z] 所有字母范围 a-z 或者 A-Z
2.5 [^a-z] 除了小写字母以外
2.6 [[:alnum]]+ 文字数字字符可以被重复1次或更多次 至少有一个字母字符
2.7 (very)*large =>large,very large,very very large ............
2.8 ^abc 以abc开头的匹配
2.9 abc$ 以abc结尾的匹配
2.10 ^[a-z]$ 匹配只包含a-z之间一个字符的字符串
2.11 song|jiu|lin 匹配song,jiu或者lin
2.12 \$ => $
\\ => \
\. => .
\, => ,
// 当一个字符类的开始或者结尾出现 . 的时候,这只代表一个点号
^[a-zA-Z0-9_\-.]+ 至少有一个字母,数字,下划线,连接符,点号,或者这些组合开始
2.13 用正则表达式查找字符串
ereg(string patten,string search,array[matches]);
在Search中搜寻与patten正则表达式匹配的内容并存入matches
eregi 不区分大小写,
2.14 用正则表达式替换子字符串
string ereg_replace(string patten,string replacement,string search);
2.15 用正则表达式分割字符串
array split(string patten,string search[,int max]);
####strops替换strstr() 因为strops速度要比 strstr快很多
####strrpos反向查找
1.7 替换
str_replace(mixed needle,mixed new_needle,mixed haystack[,int &count]);//对大小写敏感,str_ireplace 无视大小写
用new_needle 替换了haystack中所有的needle, count是要执行替换的操作次数
#########count 是引用,所以可以作为带出参数!
$arr = array("blue","red","green","yellow");
print_r(str_replace("red","pink",$arr,$i));
echo "Replacements: $i";
$find = array("Hello","world");
$replace = array("B");
$arr = array("Hello","world","!");
print_r(str_replace($find,$replace,$arr));
substr_replace($test,'x',-1);// 将字符串$test 的 -1 位置替换成x
二、正则表达式// 必须被包在 ' '里面
2.1 .at 可以与Cat,sat,mat等匹配
2.2 [a-z]at [] 里面是a-z的一个字符
2.3 [aedf] 范围是a,e,d,f
2.4 [a-zA-Z] 所有字母范围 a-z 或者 A-Z
2.5 [^a-z] 除了小写字母以外
2.6 [[:alnum]]+ 文字数字字符可以被重复1次或更多次 至少有一个字母字符
2.7 (very)*large =>large,very large,very very large ............
2.8 ^abc 以abc开头的匹配
2.9 abc$ 以abc结尾的匹配
2.10 ^[a-z]$ 匹配只包含a-z之间一个字符的字符串
2.11 song|jiu|lin 匹配song,jiu或者lin
2.12 \$ => $
\\ => \
\. => .
\, => ,
// 当一个字符类的开始或者结尾出现 . 的时候,这只代表一个点号
^[a-zA-Z0-9_\-.]+ 至少有一个字母,数字,下划线,连接符,点号,或者这些组合开始
2.13 用正则表达式查找字符串
ereg(string patten,string search,array[matches]);
在Search中搜寻与patten正则表达式匹配的内容并存入matches
eregi 不区分大小写,
2.14 用正则表达式替换子字符串
string ereg_replace(string patten,string replacement,string search);
2.15 用正则表达式分割字符串
array split(string patten,string search[,int max]);