php基础代码⼤全(不断完善中)
  下⾯是基础的PHP的代码,不断完善中~
1//语法错误(syntax error)在语法分析阶段,源代码并未被执⾏,故不会有任何输出。
2
3
4/* 【命名规则】 */
5常量名类常量建议全⼤写,单词间⽤下划线分隔// MIN_WIDTH
6变量名建议⽤下划线⽅式分隔// $var_name
7函数名建议⽤驼峰命名法// varName
8定界符建议全⼤写// <<<DING, <<<'DING'
9⽂件名建议全⼩写和下划线、数字// func_name.php
10私有属性名、⽅法名建议加下划线// private $_name _func
快捷指令url代码大全
11接⼝名建议加I_                    // interface I_Name
12
13/* 语⾔结构 */
14 array(), echo(), empty(), eval(), exit(), isset(), list(), print(), unset()
15 echo, print 可省略括号。
16
17/* 预定义常量 */
18 PATH_SEPARATOR  //路径分隔符(Windows为分号,类Unix为冒号)
19 DIRECTORY_SEPARATOR //⽬录分隔符
20 PHP_EOL //当前系统的换⾏符
21 PHP_VERSION //PHP版本号
22 PHP_OS  //PHP服务操作系统
23 PHP_SAPI    //⽤来判断是使⽤命令⾏还是浏览器执⾏的,如果 PHP_SAPI=='cli' 表⽰是在命令⾏下执⾏
24 PHP_INT_MAX                    INT最⼤值,32位平台时值为2147483647
25 PHP_INT_SIZE                  INT字长,32位平台时值为4(4字节)
26 M_PI    //圆周率值
27 M_E    //⾃然数
28
29//PHP运⾏环境检测函数
30 php_sapi_name() //返回⼀个PHP与WEB服务器接⼝类型的⼩写字符串
31该函数返回值与常量PHP_SAPI⼀致!
32接⼝类型:SAPI(the Server API, SAPI)
33可能值:aolserver、apache、apache2filter、apache2handler、caudium、cgi、cgi-fcgi、cli、 continuity、embed、isapi、litespeed milter、nsapi、phttpd、pi3web、roxen、thttpd、tux、webjames  34
35
36/* ⼤⼩写问题 */
37 - 类名、⽅法名、属性名、函数名:不区分⼤⼩写
38 - 变量名、常量名、元素下标:区分⼤⼩写
39
40/* 可变标识符 */
41可变变量  $i = 3; $k = 'i'; echo $$k; //输出3
42可变函数  function func() {echo 'hello!';} $i = 'func'; $i(); //输出hello
43可变下标  $i = '1234'; $k = 3; echo $i[$k];  //输出4
44可变类名class CLS{public $k = 'hello';} $i = 'CLS'; $j = new $i; echo $j->k;
45可变属性class CLS{public $k = 'hello';} $i = 'k'; $j = new CLS; echo $j->$i;
46可变⽅法class CLS{public function k(){echo 'hello';}} $i='k'; $j=new CLS; $j->$i();
47
48/* 可变变量 */
49 * ⽤于业务逻辑判断得到某些具体信息
50    $var_name = "class_name";
51    $$var_name = "PHP0913";        // $class_name = "PHP0913";$class_name已存⼊内存中
52    var_dump($class_name);        // var_dump($$var_name);
53
54/* 变量函数 */
55 get_defined_vars    //返回由所有已定义变量所组成的数组(包括环境变量、服务器变量和⽤户定义的变量)
56
57
58/* unset() */
59 * unset()仅删除当前变量名和引⽤,其值并未被删除
60 * 引⽤传递中,删除⼀个变量及其引⽤,其他变量及引⽤均存在,且值依然存在
61
62      echo "<br />";
63    $v3 = '值';
64    $v4 = &$v3;
65    unset($v4);
66    var_dump($v3, $v4);
67
68/* 变量的最长有效期 */
69 * 当前脚本的执⾏周期,脚本执⾏结束,变量即消失
70
71
72/* 预定义变量/超全局变量 */
73 $GLOBALS
74 $_COOKIE
75 $_ENV
76 $_FILES
77 $_GET
78 $_POST
79 $_REQUEST
80 $_SERVER
81 $_SESSION
82
83
84/* 常量定义 */
85 define(常量名, 常量值, [区分⼤⼩写参数])        //true表⽰不区分/false表⽰区分⼤⼩写
86const常量名 = 常量值// 新,建议
87常量名可以使⽤特殊字符
88 constant($name)        // 获取常量名
89// 例:echo constant('-_-');
90
91
92/* 常量相关函数 */
93 defined
94 get_defined_constants
95
96
97/* 预定义常量 */
98 __FILE__            所在⽂件的绝对路径
99 __LINE__            ⽂件中的当前⾏号
100 __DIR__            ⽂件所在⽬录
101 __FUNCTION__        函数名称
102 __CLASS__            类的名称
103 __METHOD__        类的⽅法名
104 __NAMESPACE__        当前命名空间的名称
105
106
107/* 整型 */
108整型占⽤4字节,共4*8=32位,最⼤值为2147483647,最⼩值为-2147483648,最⼩值的绝对值⽐最⼤值的⼤1
109最⾼为表⽰正负,1表⽰负,0表⽰正
110
111
112/* 进制转换函数 */
113只能⼗进制与其他进制进⾏转换,只有六种
114转换时,参数应是字符串(即不可含⼋进制的“0”或⼗六进制的“0x”)
118    hex
119 hexdec()    ⼗六进制转⼗进制也可写hex2dec()
120 dechex()    ⼗进制转⼗六进制也可写dec2hex()
121 bindec()    ⼆进制转⼗进制也可写bin2dec()
122 decbin()    ⼗进制转⼆进制也可写dex2bin()
123 octdec()    ⼋进制转⼗进制也可写oct2dec()
124 decoct()    ⼗进制转⼋进制也可写dec2oct()
125
126
127/* 浮点数 */
128浮点数不能⽐较⼤⼩!!!
129⼏乎所有⼩数,在保存时都是近似值⽽不是精确值!
130最⼤值:+/- 1.8E308
131 PHP所能保存的最长⼩数位:14位
132
133/* 单引号字符串 */
134单引号字符串中,只能转义反斜杠和单引号
135
136/* 双引号字符串 */
137只解析字符串⼀次!!!
138 eval    把字符串作为PHP代码执⾏
139⼤括号包裹变量,可确定变量名界限。如:"aaa{$bbb}ccc"
140双引号中可以将ASCII码转换为字符
141"\x61" -> a    // 字符串中不需0,整型中才是0x前导
142"\x49\x54\x43\x41\x53\x54" -> ITCAST
143将ASCII转成字符函数chr()
144将字符转成ASCII函数ord()
145 #双引号转义列表
146 \n 换⾏
147 \r 回车
148 \t ⽔平制表符
149 \\ 反斜线
150 \$ 美元标记
151 \v 垂直制表符
152 \e Escape
153 \f 换页
154 \" 双引号"
155 \[0-7]{1,3} 符合该正则表达式序列的是⼀个以⼋进制⽅式来表达的字符
156 \x[0-9A-Fa-f]{1,2} 符合该正则表达式序列的是⼀个以⼗六进制⽅式来表达的字符
157
158
159
160/* 定界符 */
161 herodoc - 功能同双引号,能解析
162 $str = <<<AAA
163字符串内容
164 AAA;
165
166 nowdoc - 功能同单引号,不能解析
167只在开始位置有单引号
168 $str = <<<'AAA'
169字符串内容
170 AAA;
171
172
173/* 字符串的使⽤ */
174可将字符串当作⼀个字符的集合来使⽤,可独⽴访问每个字符。仅适⽤于单字节字符(字母、数字、半⾓标点符号),像中⽂等不可⽤ 175 $str = "abcd";
176 echo $str[3];  // d
177 echo $str{0};  // a
178
179
180/* 【类型操作函数】 */
181//获取/设置类型
182 gettype($var) //获取变量的数据类型
183 settype($var, $type) //设置变量的数据类型
184
185//类型判断
186 is_int
187 is_float
188 is_null
189 is_string
190 is_resource
191 is_array
192 is_bool
193 is_object
194 is_numeric      检测变量是否为数字或数字字符串
195
196//转换成指定的数据类型
197 boolval
198 floatval
199 intval
200 strval
201
202//强制转换类型
203 (int)
204 (float)
205 (string)
206 (bool)
207 (array)
208 (object)
209 (unset) //转换为NULL
210 (binary) 转换和 b前缀转换//转换成⼆进制
211
212 var_dump        打印变量的相关信息。
213显⽰关于⼀个或多个表达式的结构信息,包括表达式的类型与值。
214数组将递归展开值,通过缩进显⽰其结构。
215 var_export($var [,bool $return]) //输出或返回⼀个变量的字符串表⽰
216    $return:为true,则返回变量执⾏后的结果
217 print_r        打印关于变量的易于理解的信息
218 empty          检查⼀个变量是否为空
219 isset          检测变量是否存在
220
221/* 【流程控制】 */
222//if语句的替代语法
223if (条件判断) :
224语句块;
225 elseif (条件判断) :
226语句块;
227else :
228语句块;
229 endif;
230
231//流程控制的替代语法
232在嵌⼊HTML时常⽤
233将 { 换成 : , 将 } 换成 endif; 等
234 endif
235 endwhile
236 endfor
237 endforeach
241/* 【switch】 */
242switch (条件) {
243case状态值1:
244语句块;
245        [break;]
246case状态值2:
247语句块;
248        [break;]
249case状态值3:
250case状态值4:
251语句块;
252        [break;]
253default:
254语句块;
255        [break;]
256 }
257 switch是状态分⽀,特殊的循环
258先计算出状态值,再去与判断数作⽐较
259 break退出流程
260
261
262/* 【for循环】 */
263for (条件初始化表达式; 条件判断表达式; 条件变化表达式) {
264循环体
265 }
266
267假设循环体被执⾏了N次,则
268条件初始化表达式被执⾏1次
269条件判断表达式被执⾏N+1次
270条件变化表达式被执⾏N次
271
272注意:
2731. 循环变量在for语句结束后还可以继续使⽤,值为第⼀次失败的值
2742. 循环变量在for循环体内可以使⽤
2753. 任何条件表达式均可省略,但分号不能省略
276        a. 条件初始化表达式被省略时,循环变量被赋值为null,在与条件判断时,
277进⾏类型转换后再⽐较。也可以在for语句外进⾏初始化。
278        b. 条件判断表达式被省略时,表⽰循环为真,进⼊死循环
279        c. 条件变化表达式被省略时,可以在循环体内完成
2804. 每个表达式均可由多条语句组成,每条语句之间使⽤逗号分割
281如果条件判断表达式由多条语句组成,都会执⾏,但只有最后⼀条语句才作为判断条件 2825. for只能遍历数值型索引下标数组
283数组长度函数:count()
2846. 应该将可以初始化的语句均放在条件初始化表达式内,这样可以省去很多执⾏次数
285
286
287/* 【goto】5.3+ 版本 */
288⽤来跳转到程序中的某⼀指定位置
289该⽬标位置可以⽤⽬标名称加上冒号来标记。
290 PHP中的goto有⼀定限制,只能在同⼀个⽂件和作⽤域中跳转,
291也就是说你⽆法跳出⼀个函数或类⽅法,也⽆法跳⼊到另⼀个函数。
292你也⽆法跳⼊到任何循环或者switch结构中。
293常见的⽤法是⽤来跳出循环或者switch,可以代替多层的break。
294可以从循环(switch)中跳出来,但不能从外部跳转进去。⽽函数或类⽅法,向外向内均不可。 295goto a;
296 echo 'Foo';
297 a:
298 echo 'Bar';
299
300
301/* 【⽂件加载】 */
302 require / include / require_once / include_once
303⽂件载⼊只是载⼊⽬标⽂件内的代码并执⾏,与载⼊的⽂件类型⽆关
304
305⽂件载⼊属于执⾏阶段,当执⾏到require等语句时,才载⼊该⽂件的代码,
306编译并执⾏,然后回到require等语句位置继续执⾏下⾯的语句
307【注意】
308在载⼊开始时,先退出PHP模式;
309再载⼊⽬标⽂件代码,执⾏该代码;
310结束时,再进⼊PHP模式。
311 require:处理失败,产⽣ E_COMPILE_ERROR 错误,脚本中⽌。
312 include:处理失败,产⽣ E_WARNING 错误,脚本继续执⾏。
313
314 #不建议使⽤require_once/include_once
315
316
317/* 【相对路径】 */
318当前浏览器请求的哪个脚本,当前位置就是属于哪个脚本。
319 ./file 和 file 都表⽰当前⽬录下的file⽂件
320 file情况(嵌套载⼊⽂件时):
321如果当前⽬录没到该⽂件就在代码⽂件所在⽬录中继续。
322如果当前⽬录到有该⽂件,则不会再在代码⽂件所在⽬录去也不会再加载。
323 __DIR__    脚本⽂件所在⽬录
324 __FILE__    脚本⽂件路径
325
326 include_path    加载⽂件查⽬录
327    set_include_path()  设置include_path,可多个,⽤字符串作参数
328该函数设置的path只针对该当前⽂件有效
329该设置只针对查未直接写⽂件路径⽅式有效
330设置新的include_path会覆盖原来的
331
332    get_include_path()  获取当前include_path设置项,⽆参数
333
334路径分隔符,在Windows下是分号,在Linux下是冒号
335利⽤预定义常量 PATH_SEPARATOR 来获得当前的分隔符
336
337如果直接写⽂件名:
3381. include_path所设置的
3392. 当前⽬录
3403. 代码所在⽂件的⽬录
341如果⽂件名前带有路径,则会直接根据路径查,include_path直接被忽略
342
343
344/* 【return】 */
345 return与require结合,可返回⽂件的内容,return写在被载⼊的⽂件内
346 return可以终⽌所在脚本的执⾏,作为普通脚本语句
347 return可以返回函数的相应值
348
349
350/* 【终⽌和延迟脚本执⾏】 */
351 die / exit  终⽌
352 return是终⽌所在脚本的执⾏
353 die和exit会⽴即终⽌脚本执⾏
354 die("到此为⽌");    该函数内的字符串可被输出
355 sleep()  延迟(单位:秒)
356默认最多可延迟30秒,PHP配置可以修改 max_execution_time
357例:sleep(12);
358 usleep()    以指定的微秒数延迟执⾏
359 time_sleep_until    使脚本睡眠到指定的时间为⽌
3642. ⽂件只是代码的载体,程序均在内存中执⾏!
3653. 如果函数的定义在需要载⼊的⽂件内,则需要先载⼊该⽂件,否则调⽤出错!
3664. 函数的定义可以出现在其他的代码段中,此时函数不会在编译阶段被执⾏
367只有被执⾏到时才会被定义!只有独⽴定义时才会被编译在内存中!
368如果出现在其他函数体内,也需要外层函数被调⽤时才被定义并⽣效!
3695. 函数名不区分⼤⼩写
3706. 不允许重名,包括系统函数
3717. 【可变函数】
372函数名可以⽤其他变量代替
373    $func_name = "sayHello";
374    $func_name();      //此时调⽤sayHello()函数
375注意:只有在调⽤时才能使⽤变量,定义时不允许!
3768. 变量可作为函数名调⽤函数,数组元素值也可以!
3779. 形式参数parameter,实际参数argument
378可以对参数传递null,表⽰该形参不想传递值
379形参与实参之间既可值传递,也可引⽤传递。
380引⽤传递参数,应该在定义函数时就在形式参数前加上 & 符号,⽽此时调⽤函数实参必须为变量
381如何选择使⽤哪种传递⽅式?
382        a. 是否需要保证原始数据的完整性
383        b. 是否需要增加效率
384        c. 对⼤数据引⽤传递可节省内存
38510. 参数默认值
386        a. 函数的参数默认值必须是已经确定的值,不能是变量!
387只要在调⽤之前定义该常量,则可以使⽤常量作为参数默认值
388        b. 函数默认值可以有多个,建议将有默认值的参数放在参数列表的最后⾯
389这样可以在调⽤函数时,不赋予后⾯有默认值的参数值,否则会出错
390        c. 默认参数可以是⾮标量类型,⽐如数组、null
391        d. 任何默认参数必须放在任何⾮默认参数的右侧
39211. 参数数量
393    a. 形参数量多于实参数量
394报告警告级别错误,并以NULL代替
395    b. 实参多于形参
396不报告错误,依次为形参赋值
397    c. 不确定参数数量
3981) ⼀个形参都不定义,永远都是实参多于形参
3992) 【可变数量参数】
400            func_get_args() 获取当前函数被调⽤时所有实参的值,返回⼀个所有实参值组成的数组
401            func_get_arg()  获取某个实参的值,通过索引值标识,e.g: func_get_arg(0)
402            func_num_args() 获取所有实参的数量
40312. 【return】返回值
404    a. 函数只有⼀个返回值,可以通过返回⼀个数组来得到类似的结果,但可以有多条return语句
405    b. return语句会⽴即中⽌函数的运⾏,并将控制权交回调⽤该函数的代码⾏
406    c. 可以返回包括数组和对象的任意类型
407    d. 函数的返回也分值传递和引⽤传递(返回的是⼀个变量才可)
4081) 默认是值传递⽅式
4092) 引⽤传递⽅式:
410            - 定义函数时,函数名前加上& 表⽰该函数可以返回引⽤
411            - 调⽤函数时,函数名前加上& 表⽰取得函数返回的引⽤
412此时,函数外修改返回值,会修改函数内的该返回变量的值
413            - 如果函数需返回引⽤,则需要返回⼀个变量才可以
414            - 从函数返回⼀个引⽤,必须在函数声明和指派返回值给⼀个变量时都使⽤引⽤操作符&
415                function &returns_reference(){return $someref;}
416                $newref =& returns_reference();
4173) 返回引⽤的作⽤
418
419
420/* 【变量作⽤域】 */
421 a. 全局变量和局部变量
4221) 作⽤域之间不重叠,即不同作⽤域的变量,之间不可访问
4232) 全局作⽤域  - 函数之外的区域
4243) 局部作⽤域  - 函数内的区域,每个函数都是⼀个独⽴的作⽤域
425
426 b. 超全局变量,既可以在全局也可在局部使⽤,仅能⽤系统⾃带的,均是数组变量。
427    $GLOBALS    $_COOKIE    $_ENV      $_FILES $_GET
428    $_POST      $_REQUEST  $_SERVER    $_SESSION
429 c. $GLOBALS
4301) 不能存在超全局变量,但可以有超全局的数据!
4312) 将需要的数据放到超全局变量的数组内,但统⼀使⽤$GLOBALS
4323) $GLOBALS 特征
433        - 每个全局变量就是对应$GLOBALS内的⼀个元素!
434每当增加⼀个全局,则⾃动在$GLOBALS内增加⼀个同名元素!
435同理,每当增加元素,也会增加⼀个全局变量,⼀般在函数内增加
436        - 做的任何修改,也会映射到另⼀个,包括更新和删除
437在函数内访问全局变量,只需使⽤$GLOBALS
438        - 出现过的全局变量,就可以通过$GLOBALS这个数组取得
4394) PHP⽣命周期中,定义在函数体外部的所谓全局变量,函数内部是不能直接获得的
4404) global关键字(不建议使⽤)
441将局部变量声明为同名全局变量的⼀个'引⽤'!相当于常量的引⽤传递
442global $var;    // $var = &$GLOBALS['var'];
443不同于$GLOBALS!!!
444    global在函数产⽣⼀个指向函数外部变量的别名变量,⽽不是真正的函数外部变量。
445    $GLOBALS确确实实调⽤是外部的变量,函数内外会始终保持⼀致。
446    global的作⽤是定义全局变量,但是这个全局变量不是应⽤于整个⽹站,⽽是应⽤于当前页⾯,包括include或require的所有⽂件。 447 d.
4481) 作⽤域只针对变量,对常量⽆效
4492) 被载⼊⽂件中定义的变量作⽤域取决于被载⼊的位置。
450函数外被载⼊就是全局,函数内被载⼊就是局部!
451
452
453/* 【变量⽣命周期】 */
4541. 脚本结束时,全局变量消失
4552. 函数执⾏完时,局部变量消失
4563. 静态变量
457    static关键字
458静态变量仅在局部函数域中存在,但当程序执⾏离开此作⽤域时,其值并不丢失。
459静态变量仅会被初始化⼀次,其他局部变量每次被调⽤时都会被重新赋值。
460        static声明的静态变量的⽣命周期会被⼀直延续。
461
462
463/* 【迭代和递归】 */
464迭代⽐递归效率⾼!
465迭代是⼀种思想(算法),结构和使⽤上如同循环!
466递归是⼀种思想(算法),将⼤问题拆分成⼩问题,逐⼀解决⼩问题以解决⼤问题
467要求⼤问题和⼩问题的解决⽅案是⼀致的!
468递归的结构和语法体现如图函数。函数体内调⽤函数本⾝!
469递归出⼝:当该问题可以解决时,则不⽤再递归
470
471
472/* 【匿名函数/闭包函数】 */
473匿名函数,也叫闭包函数(closures),允许临时创建⼀个没有指定名称的函数。
474
4751. 定义匿名函数时,不需增加函数名。
4762. PHP对匿名函数的管理,以⼀个对象的⽅式进⾏处理。
4773. 匿名函数应该存放到变量内。
4784. 匿名函数通过Closure类来实现
4795. 可以使⽤函数作为函数的参数和返回值
4806. 声明函数时可以使⽤ use($param) 来向函数中传⼊函数外的变量,结合变量引⽤来实现闭包
4817. 可以⽤变量引⽤函数
482 $func = function ($e) {
487这不是可变函数,⽽是对象。Closure闭包类
488//use语法
489匿名函数倾向于值的概念,可能出现在任何地⽅。
490 use可以使得匿名函数使⽤其外部作⽤域的变量。⾮全局!
491 use与全局的区别:
492    use使⽤其外部作⽤域的变量
493 function out() {
494    $v = "in out";
495    $func = function () use (& $v) {
496        var_dump($v);
497    }
498 }
499    use类似参数的⾃动传递,也⽀持值与引⽤的传递⽅式。
500//作⽤
501常作为'临时函数'被调⽤(只在某个地⽅被调⽤的函数)
502例如:
503        PHP存在⼀个array_map()函数,功能是针对⼀个函数内每个元素,去调⽤某个函数
504操作结果(array) = array_map(操作函数, 操作数组);
505        $result_arr = array_map(function ($v) {return $v3}, $arr);
506
507//闭包⽤法实例
508 function closureCreater() {
509    $x = 1;
510return function($fun = null) use(&$x) {//按引⽤传值
511        echo "<br />" . $x++;
512        $fun and $fun();
513    };
514 }
515
516 $x = "hello world";
517 $test = closureCreater();
518 $test();
519 $test(function(){ echo "closure test one"; });
520 $test(function(){ echo "closure test two"; });
521 $test(function() use($x){ echo "<br />".$x;});
522
523//将函数保存为数组元素
524 $x = 'outer param.';
525 $arr = array();
526 $arr[] = function($str)use($x){ return $str.$x; };
527 echo $arr[0]('test fun in arr,');
528
529
530/* 【数组】 */
531关联数组:键和值有关联,键表⽰值的逻辑含义。
532索引数组:键和值⽆关联,键表⽰值的位置。通常下标从0开始,递增元素
533 count($var [,$mode]) //统计数组元素个数
534    $mode可选,设为1或true时则递归统计
535    $var⾮数组,返回1;$var未初始化或等于null或空数组,返回0
536
537//键名的使⽤
538整型数字键不需加引号($arr[1])
539字符串数字键也不需加引号($arr = array('1'=>'abc'); $arr[1])
540关联数组,字符串键需加引号($arr = array('a'=>'aaa'); $arr['a'])
541关联数组,双引号中解析变量,可不加引号($arr = array('a'=>'aaa'); "$arr[a]")
542
543/* 【指针】 */
544 current/pos    返回当前被内部指针指向的数组单元的值,并不移动指针。
545 key            返回数组中当前单元的键名,并不移动指针
546 next        将数组中的内部指针向前移动⼀位,并返回移动后当前单元的值。先移动,再取值。 547 prev        将数组的内部指针倒回⼀位,并返回移动后当前单元的值先移动,再取值。
548 end            将数组的内部指针指向最后⼀个单元,并返回最后⼀个单元的值
549 reset        将数组的内部指针指向第⼀个单元,并返回第⼀个数组单元的值
550
551 each    返回数组中当前的键/值对并将数组指针向前移动⼀步。
552返回的是⼀个由键和值组成的长度为4的数组,下标0和key表⽰键,下标1和value表⽰值 553在执⾏each()之后,数组指针将停留在数组中的下⼀个单元
554或者当碰到数组结尾时停留在最后⼀个单元。
555如果要再⽤ each 遍历数组,必须使⽤ reset()。
556
5571. 以上指针操作函数,除了key(),若指针移出数组,则返回false。⽽key()移出则返回null。 5582. 若指针⾮法,不能进⾏next/prev操作,能进⾏reset/end操作
5593. current/next/prev    若遇到包含空单元(0或"")也会返回false。⽽each不会!
560
561 list    把数组中的值赋给⼀些变量。list()是语⾔结构,不是函数
562仅能⽤于数字索引的数组并假定数字索引从0开始
563/* 可⽤于交换多个变量的值 */ list($a, $b) = array($b, $a);
564例:list($drink, , $power) = array('coffee', 'brown', 'caffeine');
565
5661. 复制数组,其指针位置也会被复制。
567特例:如果数组指针⾮法,则拷贝的数组指针会重置,⽽原数组的指针不变。
568【指针问题】
569谁第⼀个进⾏写操作,就会开辟⼀个新的值空间。与变量(数组变量)值传递给谁⽆关。
570数组函数current()被定义为写操作,故会出现问题。
571        foreach遍历的是数组的拷贝,当被写时,才会开辟⼀个新的值空间。
572即,foreach循环体对原数组进⾏写操作时,才会出现指针问题。
573如果开辟新空间时指针⾮法,则会初始化指针。
5742. 如果指针位置出现问题,则reset()初始化⼀下就可解决。
575
576
577/* 【遍历数组】 */
578 * 先到元素,再获取键和值
579
580foreach
581foreach (array_expression as [$key =>] & $value)
582当foreach开始执⾏时,数组内部的指针会⾃动指向第⼀个单元。
583获取元素信息后,移动指针,再执⾏循环体
5841. foreach本⾝循环结构,break和continue适⽤于foreach
5852. foreach⽀持循环的替代语法。
5863. $value是保存元素值的变量,对其修改不会改变数组的元素值
5874. $value⽀持元素值的引⽤拷贝,在$value前加上&即可
5885. $key不⽀持引⽤传递
5896. foreach遍历的是原数组的拷贝,⽽在循环体对数组的操作是操作原数组
590即循环体对数组的操作,对原数组⽣效,对遍历不⽣效。
591先拷贝⼀份数组⽤作遍历
592
594while (list($key, $val) = mysql_fetch_row($result)) = each($arr) {
595  echo "$key => $val\n";
596 }
597
598
599
600/* 【数组函数】 */
601//统计计算
602 count        计算数组中的单元数⽬或对象中的属性个数
603 array_count_values  统计数组中所有的值出现的次数
604 array_product      计算数组中所有值的乘积
605 array_sum          计算数组中所有值的和

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。