热门标签 | HotTags
当前位置:  开发笔记 > 运维 > 正文

php核心技术-数组操作符及数组相关函数

Array_merge()当出现下标相同的元素时:如果是索引下标相同,则会将后边的数组($arr2)元素的下标按照$arr1的下标做递增,实现合并。如果是关联下标相同,则后边的元素将覆盖前边的元素的值
数组操作符:
+:数组的合并运算
$arr1 + $arr2 但是注意:如果出现 $arr1 与 $arr2中元素下标相同的元素,则保留$arr1元素的值。
对应比较 Array_merge(); 用于合并数组的函数。
Array_merge($arr1, $arr2);

Array_merge()当出现下标相同的元素时:如果是索引下标相同,则会将后边的数组($arr2)元素的下标按照$arr1的下标做递增,实现合并。如果是关联下标相同,则后边的元素将覆盖前边的元素的值。


$arr1 = array('a', 'b', 'c', 'd');  
$arr2 = array('i', 'ii', 'iii', 'iv');  
$arr3 = array('a' => 1, 'b' => 2, 'c'=> 3, 'd'=>4);  
$arr4 = array('a' => 'one', 'b' => 'two', 'c' => 'three');  
var_dump($arr1 + $arr2);  
echo '
'; var_dump($arr1 + $arr3); echo '
'; var_dump(array_merge($arr1, $arr2)); echo '
'; var_dump(array_merge($arr1, $arr3)); echo '
'; var_dump(array_merge($arr3, $arr4));


==等于

当数组中存在相同的键值对时 就认为是相等的。元素个数相同,并且每个元素的下标与值相同。


$arr5 = array('a' => 1, 'b' => 2);  
$arr6 = array(1, 2);//0=>1 1=>2  
$arr7 = array('b' => 2, 'a' => 1);  
var_dump($arr5 == $arr6);//false  
var_dump($arr6 == $arr7);//false  
  
var_dump($arr5 == $arr7);//true  
var_dump($arr5 === $arr7);//false  


===全等, 在相等的基础上,同时要求元素的顺序也相同。


var_dump($arr5 == $arr7);//true  ==  
var_dump($arr5 === $arr7);//false  ===  


数组的相关处理函数:
Range();创建一个包含指定范围元素的数组。
例如:需要创建一个包含所有小写字母的数组。
range

创建一个数组,需要包含,所有的字母和数字(不要0)。


//制作所有可能的字符的集合  
$chars = array_merge(range('a', 'z'), range('A', 'Z'), range(1, 9));  


Array_rand();从数组中随机的取得一个或多个单元。取得的是随机的下标,不是随机的元素值。如果需要取得随机的元素值,需要利用随机的下标,再获取相对的值。


Array_rand($arr, $n);
//随机的取得4个元素下标  
$rand_keys = array_rand($chars, 4); 


取得 $chars数组中 随机的4个元素值:


//打乱顺序  
shuffle($rand_keys);//打乱  
//遍历所有的下标,然后取得对应的字符  
foreach($rand_keys as $key) {  
//    echo $key, ' ';  
    echo $chars[$key], ' ';  
}  


arrage

Shuffle() 将数组元素的顺序打乱:


//打乱顺序  
shuffle($rand_keys);//打乱  


验证码的字符:


//制作所有可能的字符的集合  
$chars = array_merge(range('a', 'z'), range('A', 'Z'), range(1, 9));  
//随机的取得4个元素下标  
$rand_keys = array_rand($chars, 4);  
//打乱顺序  
shuffle($rand_keys);//打乱  
//遍历所有的下标,然后取得对应的字符  
foreach($rand_keys as $key) {  
//    echo $key, ' ';  
    echo $chars[$key], ' ';  
}  


有关数组函数的详细内容 大家请参考:
数组键值操作函数:
Array_values();取得数组内的所有的值
Array_keys();取得数组的所有的键
phpstar

Array_combine($arr1, $arr2) 合并生成数组,但是是使用第一个数组元素的值作为新数组的下标,而使用第二个数组元素的值作为新数组的元素的值。


$arr2 = array('a', 'b', 'c');  
$arr3 = array('i', 'ii', 'iii');  
var_dump(array_combine($arr2, $arr3));  
//array(3) { ["a"]=> string(1) "i" ["b"]=> string(2) "ii" ["c"]=> string(3) "iii" }  
echo '
';


注意与array_merge的区别。
Array_flip()交换数组元素的下标与值:
$arr1 = array('a' => 1, 'b' => 2, 3, 4);  
var_dump(array_flip($arr1));  
//array(4) { [1]=> string(1) "a" [2]=> string(1) "b" [3]=> int(0) [4]=> int(1) }  
echo '
';


Array_key_exists();检查 下标是否存在

In_array();检查 值是否存在


$arr1 = array('a' => 1, 'b' => 2, 3, 4);
var_dump(array_key_exists('a', $arr1));//true  
echo '
';  
var_dump(in_array('a', $arr1));//false  
echo '
';  


数组的合并与拆分:
Array_chunk(需要拆分的数组,拆分的大小);
 
$arr1 =array('a', 'b', 'c', 'd', 'e');  
var_dump(array_chunk($arr1, 2));  
//array(3) { [0]=> array(2) { [0]=> string(1) "a" [1]=> string(1) "b" }  
[1]=> array(2) { [0]=> string(1) "c" [1]=> string(1) "d" }  
[2]=> array(1) { [0]=> string(1) "e" } }  
Array_merge($arr, $arr2, $arr3);同时合并多个数组,注意下标相同的情况即可。
merage

 Extract(); 将数组元素注册到当前的变量列表中,以元素的下标作为变量名,以元素值作为变量的值。返回值为 注册到变量列表中的变量的数量,因为并不是所有的元素都可以被注册成变量的,取决于元素的下标是否是一个合法的变量名规则。


$arr2 = array('a' => 'i', 3=>'ii', 'c'=>'iii');  
var_dump($a);//输出变量a的值 NULL  
var_dump(extract($arr2));  
var_dump($a, $c);  
//string(1) "i" string(2) "ii" string(3) "iii"  


Compact(); 与extract相对,会使用一堆变量,生成一个数组。
phpstar

Explode(), 将一个字符串分割成数组。


$str1 = __DIR__;  
var_dump($str1);  
echo '
';  
var_dump(explode('\\', $str1));  
//array(5) { [0]=> string(2) "E:" [1]=> string(3) "amp"  
[2]=> string(6) "apache" [3]=> string(6) "htdocs" [4]=> string(4) "test" }  
//一个老师教多门课  
$teacher = array(  
'name'=>'xiaowang',  
'subjects' => '数学-语文-物理'  
);  
var_dump(explode('-', $teacher['subjects']));  
//array(3) { [0]=> string(6) "数学" [1]=> string(6) "语文" [2]=> string(6) "物理" }  


Implode(), 将一个数组元素链接成一个字符串。


$subjects = array('数学', '物理', '化学', '体育');  
var_dump(implode('-', $subjects));  
//string(27) "数学-物理-化学-体育




交集  并集  差集 

 
交集

array_diff 差集:


$arr1 = array('a', 'b', 'c', 'd');  
$arr2 = array('b', 'd', 'e', 'f');  
var_dump(array_diff($arr1, $arr2));  
//array(2) { [0]=> string(1) "a" [2]=> string(1) "c" }  
echo '
';  


Array_intersect()交集:


$arr1 = array('a', 'b', 'c', 'd');  
$arr2 = array('b', 'd', 'e', 'f');  
var_dump(array_intersect($arr1, $arr2));  
//array(2) { [1]=> string(1) "b" [3]=> string(1) "d" }  


模拟数据结构 栈和队列的操作:
栈:后进先出。Array_push array_pop

Array_push() 入栈 返回值 为入栈后数组的元素个数


$arr = array('a', 'b', 'c');  
//入栈  
var_dump(array_push($arr, 'd'));  
//int(4)  
var_dump($arr);  
//array(4) { [0]=> string(1) "a" [1]=> string(1) "b" [2]=> string(1) "c"  
[3]=> string(1) "d" } 


Array_pop(); 出栈 返回值为弹出的元素的值。


//出栈  
var_dump(array_pop($arr));  
//string(1) "c"  
var_dump($arr);  
//array(2) { [0]=> string(1) "a" [1]=> string(1) "b" }
  


队列:先进先出 array_push   array_shift


$arr = array();  
array_push($arr, 'a', 'b', 'c');  
var_dump($arr);  
echo '
';  
var_dump(array_shift($arr));  
//string(1) "a"  
var_dump($arr);  
//array(2) { [0]=> string(1) "b" [1]=> string(1) "c" }  


同时提供一个 可以在数组头部放入数据的操作:
Array_unshift();
排序相关的函数:

Sort() 按照数组元素的值对数组进行排序:


$arr = array(10, 20, 6, 8, 11);  
sort($arr);  
var_dump($arr); 


K表示按照下标排序,r表示倒序,a表示保持下标
自然排序: 注意 img2 与 img11的区别

Natsort


$arr2 = array('img1.jpg', 'img2.jpg', 'img11.jpg');  
sort($arr2);  
var_dump($arr2);  
//array(3) { [0]=> string(8) "img1.jpg" [1]=> string(9) "img11.jpg" 
 [2]=> string(8) "img2.jpg" }  

$arr2 = array('img1.jpg', 'img2.jpg', 'img11.jpg');  
natsort($arr2);  
var_dump($arr2);  
//array(3) { [0]=> string(8) "img1.jpg" [1]=> string(8) "img2.jpg"  
[2]=> string(9) "img11.jpg" }  


Count();统计数组的元素个数。
count
Count配合for 完成遍历索引数组:
 
count
支持递归的统计元素的个数:
函数递归
注意:当使用count去统计非数组类型的数据时 返回的结果为1
phpstar
Array_search($ele, $arr) 在数组内查找元素,找到返回下标,否则返回false
phpstar
如何利用array_search判断数组内是否有某个元素:
php技术
Array_sum()计算数组中元素的和:
php技术

推荐阅读
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • PHP 5.5.0rc1 发布:深入解析 Zend OPcache
    2013年5月9日,PHP官方发布了PHP 5.5.0rc1和PHP 5.4.15正式版,这两个版本均支持64位环境。本文将详细介绍Zend OPcache的功能及其在Windows环境下的配置与测试。 ... [详细]
  • 本文详细介绍了 Java 中 org.apache.xmlbeans.SchemaType 类的 getBaseEnumType() 方法,提供了多个代码示例,并解释了其在不同场景下的使用方法。 ... [详细]
  • 本文介绍如何在Java项目中使用Log4j库进行日志记录。我们将详细说明Log4j库的引入、配置及简单应用,帮助开发者快速上手。 ... [详细]
  • 本文详细介绍了如何在ECharts中使用线性渐变色,通过echarts.graphic.LinearGradient方法实现。文章不仅提供了完整的代码示例,还解释了各个参数的具体含义及其应用场景。 ... [详细]
  • 本文详细介绍了如何解决MyBatis中常见的BindingException错误,提供了多种排查和修复方法,确保Mapper接口与XML文件的正确配置。 ... [详细]
  • 解决JAX-WS动态客户端工厂弃用问题并迁移到XFire
    在处理Java项目中的JAR包冲突时,我们遇到了JaxWsDynamicClientFactory被弃用的问题,并成功将其迁移到org.codehaus.xfire.client。本文详细介绍了这一过程及解决方案。 ... [详细]
  • 本文详细介绍了Linux系统中init进程的作用及其启动过程,解释了运行级别的概念,并提供了调整服务启动顺序的具体步骤和实例。通过了解这些内容,用户可以更好地管理系统的启动流程和服务配置。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 探讨了小型企业在构建安全网络和软件时所面临的挑战和机遇。本文介绍了如何通过合理的方法和工具,确保小型企业能够有效提升其软件的安全性,从而保护客户数据并增强市场竞争力。 ... [详细]
  • 本文详细介绍了如何准备和安装 Eclipse 开发环境及其相关插件,包括 JDK、Tomcat、Struts 等组件的安装步骤及配置方法。 ... [详细]
  • HBase运维工具全解析
    本文深入探讨了HBase常用的运维工具,详细介绍了每种工具的功能、使用场景及操作示例。对于HBase的开发人员和运维工程师来说,这些工具是日常管理和故障排查的重要手段。 ... [详细]
  • 在本周的白板演练中,Apache Flink 的 PMC 成员及数据工匠首席技术官 Stephan Ewen 深入探讨了如何利用保存点功能进行流处理中的数据重新处理、错误修复、系统升级和 A/B 测试。本文将详细解释保存点的工作原理及其应用场景。 ... [详细]
author-avatar
silaker
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有