PHP学习笔记之数组的定义、遍历
① 创建数组第一种方法
$arr[0]=123;
$arr[1]=90;
….
概念:
[0] -> 这个我们称为下标,或者称为 关键字
$arr[0] -> 这个称为数组的一个元素.
$arr[0]=123; 123 表示该$arr[0]元素对应的值
$arr –》这个是该数组的名称.
☞在php数组中,元素存放的值可以是任意数据数据类型
② 创建数组的第二种方法
基本语法
$数组名=array(值1,值2,.......);
举例说明:
$arr=array(1,90,"helllo",89.5);
③ 第三种方式创建数组(在默认情况下,我们的元素的下标,是从0开始给你编号,但是实际上,也可以自己指定)
基本语法$arr[‘logo’]=”北京”;
$arr[’hsp’]=123;
....
或者
$arr=array(”logo”=>”北京”,”hsp”=>123,4=>678);
数组的遍历方法:
注: 如果使用 for while do..while 要确定该数组的下标是从 0开始顺序排放
数组共有多少个元素,可以使用系统函数count
//
代码如下 | 复制代码 |
for循环遍历方法 //while循环遍历方法 //do..while //foreach 遍历方法 |
php的数组相关的函数
① count 函数
基本用法是
count($数组名); 可以统计该数组共有多少元素.
② is_array
③ print_r 和 var_dump
④ explode 对字符串进行分割
案例:
$str="浙江&台州&杭州";
//在实际开发中,涉及到字符串的拆分,可以考虑
$arr=explode("&",$str);
print_r($arr);
数组查找
例子:
代码如下 | 复制代码 |
<?php |
例子输出结果如下:
键名为:0
array_key_exists()函数
如果在一个数组中找到一个指定的键,函数array_key_exists()返回true,否则返回false。其形式如下:
boolean array_key_exists(mixed key,array array);
下面的例子将在数组键中搜索apple,如果找到,将输出这个水果的颜色:
代码如下 | 复制代码 |
$fruit["apple"] = "red"; |
执行这段代码得到的结果:
apple's color is red
合并数组
array_merge()函数将数组合并到一起,返回一个联合的数组。所得到的数组以第一个输入数组参数开始,按后面数组参数出现的顺序依次迫加。其形式为:
Php代码
array array_merge (array array1 array2…,arrayN)
这个函数将一个或多个数组的单元合并起来,一个数组中的值附加在前一个数组的后面。返回作为结果的数组。
如果输入的数组中有相同的字符串键名,则该键名后面的值将覆盖前一个值。然而,如果数组包含数字键名,后面的值将不会覆盖原来的值,而是附加到后面。
如果只给了一个数组并且该数组是数字索引的,则键名会以连续方式重新索引。
代码如下 | 复制代码 |
<?php // output |
2. 追加数组
array_merge_recursive()函数与array_merge()相同,可以将两个或多个数组合并在一起,形成一个联合的数组.两者之间的区别在于,当某个输入数组中的某个键己经存在于结果数组中时该函数会采取不同的处理方式.array_merge()会覆盖前面存在的键/值对,替换为当前输入数组中的键/值对,而array_merge_recursive()将把两个值合并在一起,形成一个新的数组,并以原有的键作为数组名。还有一个数组合并的形式,就是递归追加数组。其形式为:
Php代码
array array_merge_recursive(array array1,array array2[…,array arrayN])
程序实例如下:
代码如下 | 复制代码 |
<?php // output |
现在键 apple 指向一个数组,这个数组由两个颜色值组成的索引数组。
3. 连接数组
array_combine()函数会得到一个新数组,它由一组提交的键和对应的值组成。其形式为:
array array_combine(array keys,array values)
注意,两个输入数组必须大小相同,不能为空。示例如下
代码如下 | 复制代码 |
// output
|
4. 拆分数组 array_slice()
array_slice()函数将返回数组中的一部分,从键offset开始,到offset+length位置结束。其形式:
Php代码
array array_slice (array array, int offset[,int length])
offset 为正值时,拆分将从距数组开头的offset 位置开始;如果offset 为负值,则拆分从距数组末尾的offset 位置开始。如果省略了可选参数length,则拆分将从offset 开始,一直到数组的最后一个元素。如果给出了length 且为正数,则会在距数组开头的offset+length 位置结束。相反,如果给出了length且为负数,则在距数组开头的count(input_array)-|length|位置结束。考虑一个例子:
代码如下 | 复制代码 |
<?php $fruits = array("Apple", "Banana", "Orange", "Pear", "Grape", "Lemon", "Watermelon"); // output |
数组排序(下面方法用于一维数组)
•sort() 函数用于对数组单元从低到高进行排序。
•rsort() 函数用于对数组单元从高到低进行排序。
•asort() 函数用于对数组单元从低到高进行排序并保持索引关系。
•arsort() 函数用于对数组单元从高到低进行排序并保持索引关系。
•ksort() 函数用于对数组单元按照键名从低到高进行排序。
•krsort() 函数用于对数组单元按照键名从高到低进行排序。
多维数组排序
比如有个多为数组:
代码如下 | 复制代码 |
$arr = array( |
需要对二维数组中的 age 项排序。
需要用到PHP的内置函数 array_multisort(),可以看手册。
自定义函数:
代码如下 | 复制代码 |
function multi_array_sort($multi_array,$sort_key,$sort=SORT_ASC){ //处理 echo “<pre/>”; //输出 Array [b] => Array [a] => Array [d] => Array ) |
written by 大宇
global在php是全局变量了,这个global只是页面全局变量,如函数之外的变量我们可以在函数中直接使用global申明就可以获取变量的值了。例
代码如下 | 复制代码 |
<?php $a=12;
echo '$a='.$a//输出结果 ?> 输出的结果:$a=24 |
总结:在函数体内定义的global变量,函数体外可以使用,在函数体外定义的global变量不能在函数体内使用,
代码如下 | 复制代码 |
$glpbal $a; function f() //再看看下面一例 function f() f(); |
上面的实例只是基本的global全局变量知识,下面我们看看复杂点的:
代码如下 | 复制代码 |
//A.php 文件 <?php $a = 0 ; //B.php 文件 <?php |
为什么输出的却是0?!!
在用户自定义函数中,一个局部函数范围将被引入。任何用于函数内部的变量按缺省情况将被限制在局部函数范围内(包括include 和 require 导入的文件内的变量)!
解释:A.php文件的内Test_Global是定义好的第三方函数,该函数用include导入了B.php文件内的$a的global全局变量,所以$a被限制在Test_Global局部函数范围内,所以B.php文件内的$a的作用范围都在Test_Global内,而不是作用了整个A.php内….
解决方案:
1. 冲出局部函数
代码如下 | 复制代码 |
//A.php 文件 <?php //B.php 文件 <?php |
global问题解析:
question:我在config.inc.php中定义了一些变量($a),在别的文件中函数外部 include("config.inc.php"),函数内部需要使用这些变量$a,如果没有声明的话,echo $a是打印不出来任何东西的。因此声明global $a,但是有很多函数和很多变量,总不能不断重复的这样声明吧?有什么好的解决办法,请指点。
answer1:先在config.inc.php里定义常量:define(常量名,常量值)
再在其他需要用到的地方require 'config.inc.php',
然后就能在这个文件里直接使用这个常量了。
answer2:我也有个办法,就是定义数组,如$x[a],$x,那样就只要声明global $x一个了。
answer3:我试了你的这个方法,不行啊。
answer4:改你的php.ini文件。
for 循环控制
for(循环初值; 循环的条件; 步长){
//执行语句;
}
例
代码如下 | 复制代码 |
FOR ($i = 0; $i <= 2; $i++) |
输出值
value is now 0
value is now 1
value is now 2
在第一循环,$i=0,这意味着表达,($i<= 2),为ture。因此,打印语句执行时,$i得到加1,变成1。
在第二循环,$ = 1,这意味着表达,($i<= 2),为ture。因此,打印语句执行时,$i得到加1,变成2。
在第三迭代,$i= 2,这意味着表达,($i<= 2),为ture。因此,打印语句执行时,$i递增,成为1 3。
在第四迭代,$i= 3,这意味着表达,($i<= 2),是假的。因此,PHP不去执行循环,不执行打印语句。
while循环
基本语法结构是
while(循环条件){
//执行语句;
//循环条件值变化,不添加的话会成为死循环
}
例
代码如下 | 复制代码 |
<html><body> |
还是举个简单的例子,一看就明白了。下面这个例子,使用到了 while 循环语句,它的意思是,当变量 $a 小于等于5的情况下,执行一次循环,该循环执行连个语句,一是输出 $a 的值,二是给 $a 的值加1,直到 $a 小于等于 5 为 FALSE,即 $a > 5才停止循环。
do..while循环控制
基本语法结构
do{
//执行语句;
//循环条件值变化,不添加的话会成为死循环
}while(循环条件);
例
示例如下,该示例中,先执行一次循环,即 $i 加 1,然后输出 $i 的值,执行完第一次循环之后,检查条件 $i < 5,如果符合条件,则再执行一次循环,直到 $i < 5 为 FALSE 为止。
代码如下 | 复制代码 |
<html><body> |
循环相关的语句-break
基本的概念: 表示结束当前的 for 、 while 、do..while 、switch, 流程, 可以给一个数字,表示退出到第几层.
1. break语句 默认跳出 1层
2. break语句 后面带的数字,不能超过实际可以跳出的循环层数,否则,会报fatal error
循环相关的语句-continue
基本概念: continue 用于结束本次循环剩余代码,从新开始新的一次循环(如果条件为真,就继续执行), continue 后面也可以带数字,表示从第几次循环重新开始
goto语句
基本概念: 通过goto语句我们可以将程序跳转到指定的地方去执行.
goto 标签;
标签:
语句;
快速入门案例:
代码如下 | 复制代码 |
goto a; echo 'aa'; a: echo 'bb'; |
php中常量
说明:
所谓常量,我们可以理解成就是特殊的变量: 体现在
1. 定义常量前面不需要 $
2. 常量一旦定义,则不能修改其值
3. 常量在定义的时候,就需要它赋初值.
4. 常量可以通过 define 或者 const
5. 常量的名称,我们一般说是 全部大写,然后用下划线间隔
6. 什么时候需要使用常量: 在程序中我们不希望某个值变化,则考虑使用常量,比如圆周率,税率....
快速入门案例:
代码如下 | 复制代码 |
<?php
define("TAX_RATE",0.08); //第二种方法(php5.3) const TAX_RATE2=0.1; ?> |
if单分支的基本语法结构
if(条件表达式){
//执行语句;
}
if双分支
基本语法结构
if(条件表达式){
//执行语句;
}else{
//执行语句;
}
if多重分支
基本语法结构是
if(条件表达式){
//执行语句;
}else if (条件表达式){
//执行语句;
}else if(条件表示式){
//执行语句;
}else{//这里可能还有更多的else if
//执行语句;
}
☞ 对上面的结构请注意:
1) else if 可以有一个,也可以有多个
2) else 可以没有
例
代码如下 | 复制代码 |
<html> <?php |
switch分支语句
基本语法结构
switch(表达式){
case 常量1:
//执行语句;
break;
case 常量2:
//执行语句;
break;
defual:
//执行语句;
break;
}
例
下面两个例子用不同方法实现同样的事情,第一个是用 if...elseif...else 语句,一个使用 switch语句。
代码如下 | 复制代码 |
<?phpif ($i == 0) { echo "i equals 0";} elseif ($i == 1) { echo "i equals 1";} elseif ($i == 2) { echo "i equals 2";} else { echo "i is not equal to 0, 1 or 2"; } ?> |
上面这段 PHP 代码的意思是:如果变量 $i 等于 0,则输出 "i equals 0";如果变量 $i 等于 1,则输出 "i equals 1";如果变量 $i 等于 2,则输出 "i equals 2";如果都不是,则输出"i is not equal to 0, 1 or 2"。
switch 语句和 elseif 语句的比较
在 switch 语句中,条件只求一次,然后和每个 case 比较,而在 elseif 语句中,条件会再次求值。如果你的条件比较复杂,或者是多次循环,用 switch 语句速度会更加快些。
代码如下 | 复制代码 |
isEmpty=""; $isEmpty=" 非空 "; $test = empty($isEmpty)?"":trim($isEmpty); |
三目运算符?: 根据前面的条件empty($isEmpty)true或者false,条件为true时,计算?后面的表达式,false时计算:后面的表达式。
如果不习惯可以改成如下代码
代码如下 | 复制代码 |
if (empty($isEmpty)) //条件成立 { { $cookie = trim($isEmpty);
}
|
☞ 请注意:
1) case 语句有一到多
2) defaul 语句可以没有(根据自己代码的业务逻辑)
3) 通常,在case 语句后,要带break ,表示退出switch语句
4) 常量的类型 (int, float, 字符串, 布尔型)
补充
比较运算符。
$a == $b 等于 TRUE,如果 $a 等于 $b。
$a != $b 不等 TRUE,如果 $a 不等于 $b。
$a <> $b 不等 TRUE,如果 $a 不等于 $b。
$a < $b 小与 TRUE,如果 $a 严格小于 $b。
$a > $b 大于 TRUE,如果 $a 严格 $b。
$a <= $b 小于等于 TRUE,如果 $a 小于或者等于 $b。
$a >= $b 大于等于 TRUE,如果 $a 大于或者等于 $b。
逻辑运算符。
$a and $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE。
$a or $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE。
$a xor $b Xor(逻辑异或) TRUE,如果 $a 或 $b 任一为 TRUE,但不同时是。
! $a Not(逻辑非) TRUE,如果 $a 不为 TRUE。
$a && $b And(逻辑与) TRUE,如果 $a 与 $b 都为 TRUE。
$a || $b Or(逻辑或) TRUE,如果 $a 或 $b 任一为 TRUE。
个人做的笔记.....用于借鉴,如有错请指出,谢谢
代码如下 | 复制代码 |
<?php Class 对象实例说明( 普通类 ) *******************************************/ */ Class 对象实例说明( 抽象类 ) *******************************************/ /******************************************* Class 对象实例说明( 继承类 ) *******************************************/ Class 对象实例说明( 接口 ) *******************************************/ 什么情况下使用接口 **********************************/ ?> |
小结
在类内部访问静态成员属性或者方法,使用 self::(注意不是 $slef),如:
代码如下 | 复制代码 |
slef:: $country |
在子类访问父类静态成员属性或方法,使用 parent::(注意不是 $parent),如:
代码如下 | 复制代码 |
parent:: $country |
外部访问静态成员属性和方法为 类名/子类名:: ,如:
代码如下 | 复制代码 |
Person::$country |
但静态方法也可以通过普通对象的方式访问。
•类/对象 函数
•__autoload — 尝试加载未定义的类
•call_user_method_array — 调用一个用户方法,同时传递参数数组(已废弃)
•call_user_method — 对特定对象调用用户方法(已废弃)
•class_alias — 为一个类创建别名
•class_exists — 检查类是否已定义
•get_called_class — 后期静态绑定("Late Static Binding")类的名称
•get_class_methods — 返回由类的方法名组成的数组
•get_class_vars — 返回由类的默认属性组成的数组
•get_class — 返回对象的类名
•get_declared_classes — 返回由已定义类的名字所组成的数组
•get_declared_interfaces — 返回一个数组包含所有已声明的接口
•get_declared_traits — 返回所有已定义的 traits 的数组
•get_object_vars — 返回由对象属性组成的关联数组
•get_parent_class — 返回对象或类的父类名
•interface_exists — 检查接口是否已被定义
•is_a — 如果对象属于该类或该类是此对象的父类则返回 TRUE
•is_subclass_of — 如果此对象是该类的子类,则返回 TRUE
•method_exists — 检查类的方法是否存在
•property_exists — 检查对象或类是否具有该属性
•trait_exists — 检查指定的 trait 是否存在
相关文章
- 在php中eval是一个函数并且不能直接禁用了,但eval函数又相当的危险了经常会出现一些问题了,今天我们就一起来看看eval函数对数组的操作 例子, <?php $data="array...2016-11-25
- 这篇文章主要介绍了Python 图片转数组,二进制互转操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-03-09
- 本文章提供在量的数据中级操作实例有如对键名比较计算数组的差集 计算差集 给指定数组中插入一个元素 反转数组 交集赋值新的数组实例。 //定义回调函数 funct...2016-11-25
- 这篇文章主要介绍了C#二维数组基本用法,以实例形式分析了C#中二维数组的定义、初始化、遍历及打印等用法,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
- Array数组在C#中同样是最基本的数据结构,下面为大家C#数组的常用操作方法小结,皆为细小的代码段,欢迎收看收藏...2020-06-25
- 下面一段代码给大家介绍php curl模拟post请求的示例代码,具体代码如下: <?php$uri = "http://www.cnblogs.com/test.php";//这里换成自己的服务器的地址// 参数数组$data = array ( 'name' => 'tanteng'// 'passwor...2015-11-24
- 下面小编就为大家带来一篇js遍历json的key和value的实例。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2017-01-26
- 下面小编就为大家带来一篇C# 拷贝数组的几种方法(总结)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2020-06-25
- 本文记录的要实现的功能类似于 MySQL 中的 ORDER BY,上个项目中有遇到这样的一个需求。 要求:从两个不同的表中获取各自的4条数据,然后整合(array_merge)成一个数组,再根据数据的创建时间降序排序取前4条。 遇到这个...2014-06-07
- 这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
- 这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25
JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍
下面小编就为大家带来一篇JavaScript中的数组遍历forEach()与map()方法以及兼容写法介绍。小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧...2016-05-20- 这篇文章主要介绍了C#读取文件所有行到数组的方法,涉及C#针对文件及数组的相关操作技巧,需要的朋友可以参考下...2020-06-25
- 如何将下面的二维数组转为一维数组。复制代码 代码如下:$msg = array( array( 'id'=>'45', 'name'=>'jack' ), array( 'id'=>'34', 'name'=>'mary' ), array( 'id...2014-05-31
- 在php中为我们提供了一个函数var_export 他可以直接将php代码入到一个文件中哦。 代码如下 复制代码 var_export($times,true);后面不加tru...2016-11-25
- 这篇文章主要介绍了c# 遍历 Dictionary的四种方式,帮助大家更好的理解和使用c#,感兴趣的朋友可以了解下...2020-12-08
- 本文为代码分享,也是在工作中看到一些“大牛”的代码,做做分享。 具体是这样的,如下一个二维数组,是从库中读取出来的。 代码清单: 复制代码 代码如下: $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'ema...2014-06-07
jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结
借助jQuery我们可以轻松地堆DOM元素进行向上、向下遍历以及同级的遍历,本文我们即来整理jQuery遍历DOM的父级元素、子级元素和同级元素的方法总结:...2016-07-25- 我们在php中上传文件就必须使用#_FILE变量了,这个自动全局变量 $_FILES 从 PHP 4.1.0 版本开始被支持。在这之前,从 4.0.0 版本开始,PHP 支持 $HTTP_POST_FILES 数组。这...2016-11-25
- 1.前言 昨天碰到一道关于如何解决有序数组的连接问题,这是一个很常见的问题。但是这里要考虑到代码的效率问题,因为要连接的数组都是有序的,这是一个非常重要的前提条件。2.简单但效率不高的算法 我首先想到的是使用...2013-10-04