PHP学习记录之数组函数


Posted in PHP onJune 01, 2018

数组

php中的数组是一个有序映射,映射是一种把values关联到keys的类型,数组可以接受任意数量用逗号分隔符的键值对。

数组的介绍

/*
 * php中数组可以分为:
 * 索引数组:下标是数字
 * 关联数组:下标是字符串
 * 注:php中数组其实不区分索引还是关联数组,都是根据键名找到对应的值
 *
 * php可以同时包含integer和string类型的键名
 * key:可以是一个整数integer或者字符串string
 * value:可以是任意类型的值
 *
 * php中的key只能是integer或这string类型,如果使用其他类型会自动转换:
 * 1. 包含有合法整型值的字符串会被自动转换成整型(如'8'会被转换为8,但是'08'不会被转换)
 * 2. 浮点数会被转换成整型,小数部分会被舍去
 * 3. 布尔值会被转换成整型(true转成1,false转成0)
 * 4. NULL会被转换成空字符串,即''
 * 5. 数组和对象不能被用为键名
 *
 * 如果数组定义中多个单元都用了同一个键名,则只会使用最后一个,之前的值都会被覆盖
 * 如果没有指定键名,且键名不都为负数,新添加的元素的键名是已有键名的最大值+1
 * 如果键名都为负数,那么新添加的元素键名从0开始
 *
 */

数组的创建

$arr1 = array(); //创建一个空数组
$arr2 = array(1, 2, 3); //创建一个索引数组
$arr3 = array( //创建一个关联数组
  'a' => 'a_value',
  'b' => 'b_value',
  'c' => 'c_value'
);
$arr4 = []; //[]用法和array()一致,同样可以创建空数组、索引数组、关联数组
$arr4[] = 'a'; //利用[]对数组进行扩展,为数组新添元素

键名类型的自动转换

$arr = array(
  1 => 'a',      //1   键名为integer类型,不会自动转换
  'b' => 'b',     //'b'  键名为string类型,不会自动转换
  '8' => 'c',     //8   包含有合法整型值的字符串会自动转换成整型
  3.5 => 'd',     //3   键名为浮点数类型,会舍去小数,转换成integer类型
  true => 'e',    //1   键名为布尔类型,true转成1,false转成0
  null => 'f',    //''  键名为NULL类型,会转成''
  'g'         //9   没有指定键名,默认为已有最大健名的值+1
);
$arr[] = 'h';      //10  新添加一个健值对,没有指定键名,默认为已有最大健名的值+1
print_r($arr); //printf_r()是数组输出专用函数

通过range()和compact()快速创建

//range()快速创建下标连续的索引数组
///*
 * range()函数
 * array range(mixed $start, mixed $limit[, number $step=1])
 * 描述:建立一个包含指定范围单元的,且下标连续的索引数组
 * start:序列的第一个值
 * limit:序列结束于limit的值
 * step:如果给出了step的值,它将被作为单元之间的步进值,如果未指定,默认为1
 *
 * 补充:
 * string chr(int $value):将数字作为ASCII转成成字符
 * int ord(string $value):输出字符的ASCII
 */
$arr = range(1, 5);
print_r($arr); //Array([0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5)
$arr = range('a', 'b', 'c');
print_r($arr); //Array([0] => a [1] => b [2] => c)
echo chr(90), "\n"; //Z
echo ord('z'), "\n"; //122
//compact()快速创建关联数组
/*
 * compact()函数
 * array compact(mixed $varname[, mixed $...])
 * 描述:建立一个数组,包括变量名和它们的值
 *
 * 补充:
 * list($var1, $var2...):将数组中的值赋给一些变量
 */
$username = 'zhao';
$age = '22';
$email = 'wangzhao_hb@126.com';
$arr = compact('username', 'age', 'email'); //通过将已有变量名放在函数中快速生成关联数组
//Array([username] => zhao [age] => 22 [email] => wangzhao_hb@126.com)
print_r($arr);
list($a, $b, $c) = array(1, 2, 3);

echo "a的值为{$a}, b的值为{$b}, c的值为{$c}", "\n";  //a的值为1, b的值为2, c的值为3

通过const和define()定义常量数组

const ARR1 = [1, 2, 3]; //const定义常量数组
print_r(ARR1); //Array([0] => 1 [1] => 2 [2] => 3)
define('ARR2', [1, 2, 3]); //define()定义常量数组
print_r(ARR2); //Array([0] => 1 [1] => 2 [2] => 3)
//运用场景:自定义文件上传错误数组信息
define('CUSTOM_UPLOAD_ERRORS', [
  'ext_error' => '文件扩展名不符合规范',
  'maxsize' => '上传文件大小不符合规范'
]);
//遇到文件上传时扩展名不符合规范的时候,可调用报错

echo CUSTOM_UPLOAD_ERRORS['ext_error'], "\n";  //文件扩展名不符合规范

数组的使用

/*
 * => 通过键名找到对应的键值
 * 增、删、改、查
 */
//查找:通过键名找到对应的键值
$arr1 = ['a', 'b', 'c', 'd'];
$arr2 = [
  'username' => '王昭',
  'sex' => '男'
];
echo '下标为2的值:', $arr1[2], "\n"; //下标为2的值:c
echo '用户名为:',$arr2['username'], "\n"; //用户名为:王昭
$arr3 = [ //二位数组的查找
  ['id'=>'1001', 'name'=>'张三'],
  ['id'=>'1002', 'name'=>'李四']
];
echo '下标为0的姓名:', $arr3[0]['name'], "\n"; //下标为0的姓名:张三
//添加
$arr = ['a', 'b', 'c'];
$arr[] = 'd'; //添加元素,不指定键名,键名为数字
$arr['username'] = '王昭'; //添加元素,指定键名,键名为字符串
print_r($arr); //Array([0] => a [1] => b [2] => c [3] => d [username] => 王昭)
//修改
$arr = ['a', 'b', 'c', 'username'=>'王昭'];
$arr['username'] = '张三';
echo $arr['username'], "\n"; //张三
//删除
unset($arr['username']); //删除键名为'username'的键值对
print_r($arr); //Array([0] => a [1] => b [2] => c)
unset($arr[1]);
print_r($arr); //Array([0] => a [2] => c)
unset($arr); //释放数组
//print_r($arr); //输出错误 Notice: Undefined variable

其他类型转换成数组

/*
 * 如果将一个值转换为数组,将得到一个仅有一个元素的数组,其下标为0,该元素即为此标量的值;
 * 对象可以转换为数组,但是注意尽量避免这样转换,因为会导致一些意想不到的效果。
 * 注意:null转换成数组是空数组[]
 *
 * 临时转换
 * (array)$var
 *
 * 永久转换
 * settype($var, 'array')
 */
$str = 'abc';
$arr = (array)$str;
print_r($arr); //Array([0] => abc)
settype($str, 'array');
print_r($str); //Array([0] => abc)

数组运算符

/*
 * 常用的数组运算符:
 * +:合并数组,如果键名相同,只展示左边数组的键值对
 * ==:比较数组的键名和对应的键值是否相同,如果相同返回true,否则返回false
 * ===:既要比较键名和对应的键值及键值类型是否相同,而且顺序也要相同
 * !=:比较数组的键名和对应的键值是否不相同
 * !==:比较数组的键名和对应的键值和键值类型是否不相同,或者顺序不相同
 * <>:和!=效果一样
 *
 *
 */
$arr1 = [1, 2, 3];
$arr2 = ['a', 'b', 'c'];
$arr3 = ['username'=>'张三', 'age'=>12];
$arr4 = [10=>10, 11=>11];
$arrSum1 = $arr1 + $arr2; //如果键名相同,只会展示左边数组的键值对
$arrSum2 = $arr1 + $arr3; //+与数组是索引数组或者是关联数组无关
$arrSum3 = $arr1 + $arr3 + $arr4; //如果后面的数组的键名和前面的数组的键名重复,不会覆盖,会展示前面数组对应的键值
print_r($arrSum1); //Array([0] => 1 [1] => 2 [2] => 3)
print_r($arrSum2); //Array([0] => 1 [1] => 2 [2] => 3 [username] => 张三 [age] => 12)
print_r($arrSum3); //Array([0] => 1 [1] => 2 [2] => 3 [username] => 张三 [age] => 12 [10] => 10 [11] => 11)
$arr5 = ['1'=>1, 'b'=>2, 'c'=>3];
$arr6 = ['b'=>2, '1'=>1, 'c'=>3];
$arr7 = [1=>1, 'b'=>2, 'c'=>3];
var_dump($arr5 == $arr6); //bool(true)
var_dump($arr5 === $arr6); //bool(false)
var_dump($arr5 === $arr7); //bool(true)
var_dump($arr5 != $arr6); //bool(false)
var_dump($arr5 !== $arr6); //bool(true)

总结

以上所述是小编给大家介绍的PHP学习记录之数组函数,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

PHP 相关文章推荐
PHP4和PHP5共存于一系统
Nov 17 PHP
用PHP实现图象锐化代码
Jun 14 PHP
PHP STRING 陷阱原理说明
Jul 24 PHP
PHP 事件机制(2)
Mar 23 PHP
自编函数解决pathinfo()函数处理中文问题
Nov 03 PHP
ThinkPHP 404页面的设置方法
Jan 14 PHP
PHP获取音频文件的相关信息
Jun 22 PHP
帝国cms常用标签汇总
Jul 06 PHP
WordPress中注册菜单与调用菜单的方法详解
Dec 18 PHP
laravel创建类似ThinPHP中functions.php的全局函数
Nov 26 PHP
laravel自定义分页效果
Jul 23 PHP
PHP实现转盘抽奖算法分享
Apr 15 PHP
PHP+MySQL实现输入页码跳转到指定页面功能示例
Jun 01 #PHP
PHP+MySQL实现模糊查询员工信息功能示例
Jun 01 #PHP
php post json参数的传递和接收处理方法
May 31 #PHP
PHP调用接口用post方法传送json数据的实例
May 31 #PHP
ThinkPHP5 验证器的具体使用
May 31 #PHP
php 截取中英文混合字符串的方法
May 31 #PHP
PHP封装curl的调用接口及常用函数详解
May 31 #PHP
You might like
PHP+JQuery+Ajax实现分页方法详解
2016/08/06 PHP
thinkPHP数据库增删改查操作方法实例详解
2016/12/06 PHP
PDO::setAttribute讲解
2019/01/29 PHP
extJs 文本框后面加上说明文字+下拉列表选中值后触发事件
2009/11/27 Javascript
Javascript在IE下设置innerHTML时出现未知的运行时错误的解决方法
2011/01/12 Javascript
JS文本框默认值处理详解
2013/07/10 Javascript
jquery(hide方法)隐藏指定元素实例
2013/11/11 Javascript
JS回调函数的应用简单实例
2014/09/17 Javascript
jQuery EasyUI datagrid实现本地分页的方法
2015/02/13 Javascript
javascript实现全局匹配并替换的方法
2015/04/27 Javascript
jQuery插件kinMaxShow扩展效果用法实例
2015/05/04 Javascript
IE10中flexigrid无法显示数据的解决方法
2015/07/26 Javascript
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
2016/01/06 Javascript
详解JavaScript中js对象与JSON格式字符串的相互转换
2017/02/14 Javascript
Node.js编写CLI的实例详解
2017/05/17 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
2018/04/01 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
Element Input输入框的使用方法
2020/07/26 Javascript
[54:47]Liquid vs VP Supermajor决赛 BO 第五场 6.10
2018/07/05 DOTA
Python实现针对中文排序的方法
2017/05/09 Python
浅谈python迭代器
2017/11/08 Python
详解django的serializer序列化model几种方法
2018/10/16 Python
python使用递归的方式建立二叉树
2019/07/03 Python
解决python tkinter界面卡死的问题
2019/07/17 Python
python创建属于自己的单词词库 便于背单词
2019/07/30 Python
关于Python核心框架tornado的异步协程的2种方法详解
2019/08/28 Python
python 检测nginx服务邮件报警的脚本
2020/12/31 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
深入探究HTML5的History API
2015/07/09 HTML / CSS
公司道歉信范文
2014/01/09 职场文书
酒店端午节促销方案
2014/02/18 职场文书
小学教师评语大全
2014/04/23 职场文书
司法局群众路线教育实践活动开展情况总结
2014/10/25 职场文书
初中语文教学研修日志
2015/11/13 职场文书
2016大学军训通讯稿
2015/11/25 职场文书
个人售房合同协议书
2016/03/21 职场文书