PHP中常用的数组操作方法笔记整理


Posted in PHP onMay 16, 2016

概述
要访问一个变量的内容,可以直接使用其名称。如果该变量是一个数组,可以使用变量名称和关键字或索引的组合来访问其内容。
像其他变量一样,使用运算符=可以改变数组元素的内容。数组单元可以通过 array[key] 语法来访问。

PHP中常用的数组操作方法笔记整理

数组的基本操作
php定义数组:

<?php 
  $array = array(); 
  $array["key"] = "values"; 
?>

在PHP中声明数组的方式主要有两种:

1.用array()函数声明数组,
2.直接为数组元素赋值。

<?php
  //array数组
  $users = array('phone','computer','dos','linux');
  echo $users;//只会打印出数据类型Array
  print_r($users);//Array ( [0] => phone [1] => computer [2] => dos [3] => linux )

  $numbers = range(1,5);//创建一个包含指定范围的数组
  print_r($numbers);//Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 )
  print_r(true);//1
  var_dump(false);//bool(false)

//print_r可以把字符串和数字简单地打印出来,数组会以Array开头并已键值形式表示,print_r输出布尔值和null的结果没有意义,因此用var_dump更合适

//通过循环来显示数组里所有的值
  for($i = 0 ;$i < 5;$i++){
    echo $users[$i];
    echo '<br/>';
  }

//通过count/sizeof统计数组中单元数目或对象中的属性个数

  for($i = 0; $i < count($users);$i++){
    echo $users[$i];
    echo '<br/>';
  }
//还可以通过foreach循环来遍历数组,这种好处在于不需要考虑key
  foreach($users as $value){
    echo $value.'<br/>';//点号为字符串连接符号
  }
//foreach循环遍历 $key => $value;$key和$value是变量名,可以自行设置
  foreach($users as $key => $value){
    echo $key.'<br/>';//输出键
  }
?>

创建自定义键的数组

<?php

  //创建自定义键的数组
  $ceo = array('apple'=>'jobs','microsoft'=>'Nadella','Larry Page','Eric');
  //如果不去声明元素的key,它会从零开始
  print_r($ceo);//Array ( [apple] => jobs [microsoft] => Nadella [0] => Larry Page [1] => Eric )

  echo $ceo['apple'];//jobs

   //php5.4起的用法
  $array = [
    "foo" => "bar",
    "bar" => "foo",
  ];

  print_r($array);//Array ( [foo] => bar [bar] => foo ) 

?>

从php5.4 起可以使用短数组定义语法,用 [] 替代 array()。有点类似于javascript中数组的定义。

each()的使用

<?php
  //通过为数组元素赋值来创建数组
  $ages['trigkit4'] = 22;
  echo $ages.'<br/>';//Array
  //因为相关数组的索引不是数字,所以无法通过for循环来进行遍历操作,只能通过foreach循环或list()和each()结构

  //each的使用
  //each返回数组中当前的键/值对并将数组指针向前移动一步
  $users = array('trigkit4'=>22,'mike'=>20,'john'=>30);
  //print_r(each($users));//Array ( [1] => 22 [value] => 22 [0] => trigkit4 [key] => trigkit4 )

  //相当于:$a = array([0]=>trigkit4,[1]=>22,[value]=>22,[key]=>trigkit4);
  $a = each($users);//each把原来的数组的第一个元素拿出来包装成新数组后赋值给$a
  echo $a[0];//trigkit4

  //!!表示将真实存在的数据转换成布尔值
  echo !!each($users);//1

?>

each的指针指向第一个键值对,并返回第一个数组元素,获取其键值对,并包装成新数组

list()的使用
list用来把数组用的值赋给一些变量,看下面例子:

<?php

  $a = ['2','abc','def'];
  list($var1,$var2) = $a;
  echo $var1.'<br/>';//2
  echo $var2;//abc

  $a = ['name'=>'trigkit4','age'=>22,'0'=>'boy'];
  //list只认识key为数字的索引
  list($var1,$var2) = $a;

  echo $var1;//boy

?>

注:list只认识key为数字的索引

数组元素的排序
反向排序:sort()、asort()和 ksort()都是正向排序,当然也有相对应的反向排序.
实现反向:rsort()、arsort()和 krsort()。

array_unshift()函数将新元素添加到数组头,array_push()函数将每个新元素添加到数组 的末尾。
array_shift()删除数组头第一个元素,与其相反的函数是 array_pop(),删除并返回数组末 尾的一个元素。
array_rand()返回数组中的一个或多个键。

函数shuffle()将数组个元素进 行随机排序。
函数 array_reverse()给出一个原来数组的反向排序
数组的各类API的使用
count()和 sizeof()统计数组下标的个数
array_count_values()统计数组内下标值的个数

<?php
  $numbers = array('100','2');
  sort($numbers,SORT_STRING);//按字符串排序,字符串只比较第一位大小
  print_r($numbers);//Array ( [0] => 100 [1] => 2 )

  $arr = array('trigkit4','banner','10');
  sort($arr,SORT_STRING);
  print_r($arr);//Array ( [0] => 10 [1] => banner [2] => trigkit4 )

  shuffle($arr);
  print_r($arr);//随机排序

  $array = array('a','b','c','d','0','1');
  array_reverse($array);
  print_r($array);//原数组的反向排序。 Array ( [0] => a [1] => b [2] => c [3] => d [4] => 0 [5] => 1 )


  //数组的拷贝
  $arr1 = array( '10' , 2);
  $arr2 = &$arr1 ;
  $arr2 [] = 4 ; // $arr2 被改变了,$arr1仍然是array('10', 3)
  print_r($arr2);//Array ( [0] => 10 [1] => 2 [2] => 4 )

  //asort的使用
  $arr3 = & $arr1 ;//现在arr1和arr3是一样的
  $arr3 [] = '3' ;
  asort($arr3);//对数组进行排序并保留原始关系
  print_r($arr3);// Array ( [1] => 2 [2] => 3 [0] => 10 )

  //ksort的使用
  $fruits = array('c'=>'banana','a'=>'apple','d'=>'orange');
  ksort($fruits);
  print_r($fruits);//Array ( [a] => apple [c] => banana [d] => orange )

  //unshift的使用
  array_unshift($array,'z');//开头处添加一元素
  print_r($array);//Array ( [0] => z [1] => a [2] => b [3] => c [4] => d [5] => 0 [6] => 1 ) 

  //current(pos)的使用
  echo current($array);//z;获取当前数组中的当前单元

  //next的使用
  echo next($array);//a;将数组中的内部指针向前移动一位

  //reset的使用
  echo reset($array);//z;将数组内部指针指向第一个单元

  //prev的使用
  echo next($array);//a;
  echo prev($array);//z;倒回一位

  //sizeof的使用
  echo sizeof($array);//7;统计数组元素的个数

  //array_count_values
  $num = array(10,20,30,10,20,1,0,10);//统计数组元素出现的次数
  print_r(array_count_values($num));//Array ( [10] => 3 [20] => 2 [30] => 1 [1] => 1 [0] => 1 ) 

?>

current():每个数组都有一个内部指针指向他的当前单元,初始指向插入到数组中的第一个元素

for循环遍历

<?php
  $value = range(0,120,10);
  for($i=0;$i<count($value);$i++){
    print_r($value[$i].' ');//0 10 20 30 40 50 60 70 80 90 100 110 120 
  }
?>

数组的实例
array_pad函数的使用

<?php
  //array_pad函数,数组数组首尾选择性追加
  $num = array(1=>10,2=>20,3=>30);
  $num = array_pad($num,4,40);
  print_r($num);//Array ( [0] => 10 [1] => 20 [2] => 30 [3] => 40 )

  $num = array_pad($num,-5,50);//array_pad(array,size,value)
  print_r($num);//Array ( [0] => 50 [1] => 10 [2] => 20 [3] => 30 [4] => 40 ) 
?>

size:指定的长度。整数则填补到右侧,负数则填补到左侧。

unset()的使用

<?php
  //unset()的使用
  $num = array_fill(0,5,rand(1,10));//rand(min,max)
  print_r($num);//Array ( [0] => 8 [1] => 8 [2] => 8 [3] => 8 [4] => 8 ) 
  echo '<br/>';

  unset($num[3]);
  print_r($num);//Array ( [0] => 8 [1] => 8 [2] => 8 [4] => 8 ) 
?>

array_fill()的使用

<?php
  //array_fill()的使用
  $num = range('a','e');
  $arrayFilled = array_fill(1,2,$num);//array_fill(start,number,value)
  echo '<pre>';

  print_r($arrayFilled);

?>

array_combine()的使用

<?PHP
  $number = array(1,2,3,4,5);
  $array = array("I","Am","A","PHP","er");
  $newArray = array_combine($number,$array);
  print_r($newArray);//Array ( [1] => I [2] => Am [3] => A [4] => PHP [5] => er ) 
?>

array_splice()删除数组成员

<?php
  $color = array("red", "green", "blue", "yellow");
  count ($color); //得到4
  array_splice($color,1,1); //删除第二个元素
  print_r(count ($color)); //3
  echo $color[2]; //yellow
  echo $color[1]; //blue
?>

array_unique删除数组中的重复值

<?php
  $color=array("red", "green", "blue", "yellow","blue","green");
  $result = array_unique($color);
  print_r($result);//Array ( [0] => red [1] => green [2] => blue [3] => yellow ) 
?>

array_flip()交换数组的键值和值

<?PHP
  $array = array("red","blue","red","Black");
  print_r($array);
  echo "<br />";
  $array = array_flip($array);//
  print_r($array);//Array ( [red] => 2 [blue] => 1 [Black] => 3 ) 
?>

array_search()搜索数值

<meta charset="utf-8">
<?php
  $array = array("red","blue","red","Black");
  $result=array_search("red",$array)//array_search(value,array,strict)
  if(($result === NULL)){
    echo "不存在数值red";
  }else{
    echo "存在数值 $result";//存在数值 0 
  }
?>
PHP 相关文章推荐
PHP扩展编写点滴 技巧收集
Mar 09 PHP
php性能优化分析工具XDebug 大型网站调试工具
May 22 PHP
php后台多用户权限组思路与实现程序代码分享
Feb 13 PHP
php数组声明、遍历、数组全局变量使用小结
Jun 05 PHP
PHP调用VC编写的COM组件实例
Mar 29 PHP
分享一个php 的异常处理程序
Jun 22 PHP
PHP缓存机制Output Control详解
Jul 14 PHP
Linux下安装PHP MSSQL扩展教程
Oct 24 PHP
php中删除数组的第一个元素和最后一个元素的函数
Mar 07 PHP
php版微信自动获取收货地址api用法示例
Sep 22 PHP
Laravel模型事件的实现原理详解
Mar 14 PHP
PHP二维数组分页2种实现方法解析
Jul 09 PHP
PHP获取用户访问IP地址的5种方法
May 16 #PHP
php pdo oracle中文乱码的快速解决方法
May 16 #PHP
Yii2中OAuth扩展及QQ互联登录实现方法
May 16 #PHP
Yii2 assets清除缓存的方法
May 16 #PHP
php使用curl通过代理获取数据的实现方法
May 16 #PHP
php实现转换html格式为文本格式的方法
May 16 #PHP
php中array_unshift()修改数组key注意事项分析
May 16 #PHP
You might like
在PHP中使用redis
2013/11/04 PHP
PHP判断浏览器、判断语言代码分享
2015/03/05 PHP
PHP的邮件群发系统phplist配置方法详细总结
2016/03/30 PHP
PHP文件操作实例总结
2016/09/27 PHP
基于jquery打造的百分比动态色彩条插件
2012/09/19 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
js单词形式的运算符
2014/05/06 Javascript
PHP中CURL的几个经典应用实例
2015/01/23 Javascript
JavaScript中模拟实现jsonp
2015/06/19 Javascript
浅析JavaScript访问对象属性和方法及区别
2015/11/16 Javascript
jquery组件WebUploader文件上传用法详解
2020/10/23 Javascript
基于bootstrap的选择框插件icheck
2016/12/23 Javascript
Vue非父子组件通信详解
2017/06/12 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
基于Three.js实现360度全景图片
2018/12/30 Javascript
Vue实现类似Spring官网图片滑动效果方法
2019/03/01 Javascript
JavaScript 异步时序问题
2020/11/20 Javascript
[01:08]2014DOTA2展望TI 剑指西雅图LGD战队专访
2014/06/30 DOTA
[04:19]DOTA2亚洲邀请赛 现场花絮
2015/03/11 DOTA
Python入门篇之数字
2014/10/20 Python
Python实现的维尼吉亚密码算法示例
2018/04/12 Python
Python Logging 日志记录入门学习
2018/06/02 Python
Python中使用Counter进行字典创建以及key数量统计的方法
2018/07/06 Python
tensorflow学习教程之文本分类详析
2018/08/07 Python
Python实现简单层次聚类算法以及可视化
2019/03/18 Python
利用Python批量识别电子账单数据的方法
2021/02/08 Python
简单掌握CSS3将文字描边及填充文字颜色的方法
2016/03/07 HTML / CSS
经典c++面试题六
2012/01/18 面试题
大学生毕业自我评价范文分享
2013/11/11 职场文书
工程项目建议书范文
2014/03/12 职场文书
经典商业广告词
2014/03/13 职场文书
初中新生军训方案
2014/05/13 职场文书
运输企业安全生产责任书
2014/07/28 职场文书
2014乡党委副书记党建工作汇报材料
2014/11/02 职场文书
2015年教师教学工作总结
2015/04/28 职场文书
2016年三严三实党课学习心得体会
2016/01/06 职场文书