现在说数组
php数组有3种类型
数值数组 带有数字 ID 键的数组
关联数组 数组中的每个 ID 键关联一个值
多维数组 包含一个或多个数组的数组
关于数组的声明
<?php $a[5]; $a[5]={1,2,3,4,5}; ?>
像C语言这种常规的2种在php里是行不通的
php有个关键字array 是用来定义数组的
<?php $a=array(); ?>
这就是定义了一个空数组,不需要指定长度,里面元素可以动态添加,添加了多少个,这个数组就有多少大,而且可以继续添加,这点很爽哈
<?php $a=array(); echo $a; ?>
这样可以打印a的类型 结果是Array
但是这样的话就会报错
<?php $a=array(); echo $a[0]; ?>
因为数组是空的
定义数组主要有两种方法,一种是用array
<?php $a=array(1,2,3,4,5); for($i=0;$i<count($a);$i++) echo $a[$i]."<br/>"; ?>
count关键字可以计算一个数组有多少个元素
还有一种就是
<?php $a[0]='a'; $a[1]='b'; $a[2]='c'; for($i=0;$i<count($a);$i++) echo $a[$i]."<br/>"; ?>
直接给变量下标赋值,这个变量就自动成为数组了
但是一定要按下标顺序赋值
比如,这样就是错的
<?php $a[0]='a'; $a[1]='b'; $a[2]='c'; $a[5]='d'; for($i=0;$i<count($a);$i++) echo $a[$i]."<br/>"; ?>
还有数组里的元素可以不是同一类型
<?php $a=array(1,'b',"hello",1.0); for($i=0;$i<count($a);$i++) echo $a[$i]."<br/>"; ?>
是不是觉得很强大
现在说关联数组
关联数组比普通数组更强大了,下标不需要在用数字,而是自己取名字
这就是一种键对值的关系,跟java的map**很类似
<?php $a=array("a"=>1,'b'=>2,"c"=>3); echo $a["a"]."<br/>"; echo $a['b']."<br/>"; echo $a["c"]."<br/>"; ?>
注意是=>不是->,里面的单引号和双引号可以互换
键=>值 键可以重复 但是结果是显示最后那个
<?php $a=array("a"=>1,'a'=>2,"c"=>3); echo $a["a"]."<br/>"; echo $a["c"]."<br/>"; ?>
打印2 3
还有一种关联数组的定义,就是上面说过的
<?php $a["a"]="hello"; $a["b"]="world"; echo $a["a"]."<br/>"; echo $a["b"]."<br/>"; ?>
但是下面这样是错误的
<?php $a["a"]=>"hello"; $a["b"]=>"world"; echo $a["a"]."<br/>"; echo $a["b"]."<br/>"; ?>
另外数字也可以作为键
<?php $a["1"]="hello"; $a["2"]="world"; echo $a["1"]."<br/>"; echo $a["2"]."<br/>"; ?>
是可行的
不加引号可以输出来,但是php有提示注意,这个不要用
<?php $a['a']="hello"; $a['b']="world"; echo $a[a]."<br/>"; echo $a [ b ]"; ?>
下面说多维数组
在多维数组中,主数组中的每个元素也是一个数组。在子数组中的每个元素也可以是数组,以此类推
这就是定义了一个多维数组,二维的
<?php $a=array(array('a',1,2),array("hello",3,1.1,)); echo $a[0][0]; ?>
按C语言看,就是a[2][3] 不是array有几个就是几维了
同样,多维数组里面的元素也可以是多种类型
而且还可以这样
<?php $a=array(array('a',1,2),array("hello",3,1.1,2,'a')); echo $a[0][0]; ?>
不要求每个子数组的元素个数都一致,这点比C语言爽吧
和普通数组一样,多维数组也可以这样定义,不过我想没人会这样做。。
<?php $a[0][0]="hello00"; $a[0][1]="hello01"; $a[0][2]="hello02"; $a[0][3]="hello03"; $a[1][0]="hello10"; $a[1][1]="hello11"; $a[1][2]="hello12"; $a[1][3]="hello13"; for($i=0;$i<2;$i++){ for($j=0;$j<4;$j++) echo $a[$i][$j]." "; echo "<br/>"; } ?>
这个二维数组是a[2][4] 2行4列,比较规矩的
注意,只要列的元素数量一致才能用循环打印出,C语言则不需要考虑这句话
还可以定义多维关联数组
<?php $a=array('a'=>array('a'=>"hello",'b'=>"world"),'b'=>array('one'=>1,'two'=>2,'three'=>3)); echo $a['a']['a']; ?>
会打印hello
就看上去是有点晕,因为关联数组里面又是关联的
也可以不用这样,像下面这样就清楚许多
<?php $a=array('a'=>array("hello","world"),'b'=>array(1,2,3)); echo $a['a'][0]."<br/>".$a['b'][2]; ?>
打印出
hello 3
绝对不能这样玩
<?php $a=array(array('a'=>"hello",'b'=>"world"),array('one'=>1,'two'=>2,'three'=>3)); echo $a['a']; ?>
错误的
前面说的都是二维数组,那么三维或以上的怎么定义,很简单
<?php $a=array(array(array(1,2,3))); echo $a[0][0][0]; ?>
打印1
<?php $a=array(array(array(1,2,3)),array(array(4,5,6))); echo $a[1][0][0]; ?>
打印4
<?php $a=array(array(array(1,2,3),array(4,5,6)),array(array(7,8,9))); echo $a[0][1][1]; ?>
打印5
应该有人看着会晕
现在分析一下
比如$a[0][1][1]; 最右边中括号的元素在数组里表示最里面的
$a=array(array(array(1,2,3),array(4,5,6)),array(array(7,8,9)));
最大分了3层,最右边中括号的元素就表示最里面的那层
然后往左的中括号就往外一层,以此类推
其实多看看就明白了,分的几层就是几维数组
另外3维数组也不需要了解太透,一般掌握到二维就可以了
前面没详说foreach循环,其实用foreach循环遍历一维数组最好了
<?php $a=array(1,"hello",'a'); foreach($a as $value) echo $value."<br/>"; ?>
输出
1 hello a
是不是很简单
$value 只是一个临时变量,用来保存数组元素,叫什么名都可以
等于是把一个数组交给代理变量,让它帮着来输出
<?php $a=array(1,"hello",'a'); foreach($a as $value) echo $a."<br/>"; ?>
这样是不会输出数组元素的
只会输出
Array Array Array
以上就是php学习正式起航(3)的内容,更多相关内容请关注PHP中文网(www.php.cn)!

PHPSession失效的原因包括配置错误、Cookie问题和Session过期。1.配置错误:检查并设置正确的session.save_path。2.Cookie问题:确保Cookie设置正确。3.Session过期:调整session.gc_maxlifetime值以延长会话时间。

在PHP中调试会话问题的方法包括:1.检查会话是否正确启动;2.验证会话ID的传递;3.检查会话数据的存储和读取;4.查看服务器配置。通过输出会话ID和数据、查看会话文件内容等方法,可以有效诊断和解决会话相关的问题。

多次调用session_start()会导致警告信息和可能的数据覆盖。1)PHP会发出警告,提示session已启动。2)可能导致session数据意外覆盖。3)使用session_status()检查session状态,避免重复调用。

在PHP中配置会话生命周期可以通过设置session.gc_maxlifetime和session.cookie_lifetime来实现。1)session.gc_maxlifetime控制服务器端会话数据的存活时间,2)session.cookie_lifetime控制客户端cookie的生命周期,设置为0时cookie在浏览器关闭时过期。

使用数据库存储会话的主要优势包括持久性、可扩展性和安全性。1.持久性:即使服务器重启,会话数据也能保持不变。2.可扩展性:适用于分布式系统,确保会话数据在多服务器间同步。3.安全性:数据库提供加密存储,保护敏感信息。

在PHP中实现自定义会话处理可以通过实现SessionHandlerInterface接口来完成。具体步骤包括:1)创建实现SessionHandlerInterface的类,如CustomSessionHandler;2)重写接口中的方法(如open,close,read,write,destroy,gc)来定义会话数据的生命周期和存储方式;3)在PHP脚本中注册自定义会话处理器并启动会话。这样可以将数据存储在MySQL、Redis等介质中,提升性能、安全性和可扩展性。

SessionID是网络应用程序中用来跟踪用户会话状态的机制。1.它是一个随机生成的字符串,用于在用户与服务器之间的多次交互中保持用户的身份信息。2.服务器生成并通过cookie或URL参数发送给客户端,帮助在用户的多次请求中识别和关联这些请求。3.生成通常使用随机算法保证唯一性和不可预测性。4.在实际开发中,可以使用内存数据库如Redis来存储session数据,提升性能和安全性。

在无状态环境如API中管理会话可以通过使用JWT或cookies来实现。1.JWT适合无状态和可扩展性,但大数据时体积大。2.Cookies更传统且易实现,但需谨慎配置以确保安全性。


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

SecLists
SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

Atom编辑器mac版下载
最流行的的开源编辑器

禅工作室 13.0.1
功能强大的PHP集成开发环境