【php学习】数组操作
1、json字符串和数组之间的转换
json_decode($jsonStr) json字符串解码为php变量,若第二个参数默认为false,返回一个对象;若第二个参数设置true,则返回一个数组
json_encode($arr) 将php数组编码为json字符串
json_encode($arr, JSON_UNESCAPED_UNICODE) 将php数组中的中文正常编码为json字符串
//$jsonStr中的key和value必须被双引号包裹,否则返回null
$jsonStr = '{"name":"张三", "age":"15", "addr":"北京"}';
$obj = json_decode($jsonStr);
$arr = json_decode($jsonStr, true);
var_dump_br($obj);
var_dump_br($arr); $jsonStr = json_encode($arr);
var_dump_br($jsonStr);
打印结果
object(stdClass)#1 (3) { ["name"]=> string(6) "张三" ["age"]=> string(2) "15" ["addr"]=> string(6) "北京" }
array(3) { ["name"]=> string(6) "张三" ["age"]=> string(2) "15" ["addr"]=> string(6) "北京" }
string(56) "{"name":"\u5f20\u4e09","age":"15","addr":"\u5317\u4eac"}"
2、数组操作的基本函数
array_values($arr) 返回数组内所有的value,返回类型是数组
array_keys($arr) 返回数组内所有的key,返回类型是数组
array_flip($arr) 数组中的值与键名互换(如果有重复,后者覆盖前者)
in_array($val, $arr) 判断value(可以是数组类型)是否存在于数组中
array_key_exists($key, $arr) 判断key是否存在数组中(更重要的是,它对对象也有用)
array_search($val, $arr) 返回value在数组中对应的key
$xiaocheng = array("name"=>"小程", "job"=>"php工程师");
$arr = array("person"=> $xiaocheng, "company"=>"xxx信息技术有限公司");
$arrValues = array_values($arr);//所有value
$arrKeys = array_keys($arr); //所有key
var_dump_br($arrValues);
var_dump_br($arrKeys);
$new_arr = array_flip($arr); //key和value互换,只能互换string和integer的值。
var_dump_br($new_arr);
$new_xiao_cheng = array_flip($xiaocheng);
var_dump_br($new_xiao_cheng);
$exist_value = in_array($xiaocheng, $arr); //判断value是否存在数组中
var_dump_br($exist_value);
$exist_value = in_array("php工程师", $arr); //不能深层次判断
var_dump_br($exist_value);
$exist_key = array_key_exists("person", $arr); //判断key是否存在数组中
var_dump_br($exist_key);
$key = array_search($xiaocheng, $arr); //返回value在数组中的key
var_dump_br($key);
打印结果
array(2) { [0]=> array(2) { ["name"]=> string(6) "小程" ["job"]=> string(12) "php工程师" } [1]=> string(27) "xxx信息技术有限公司" }
array(2) { [0]=> string(6) "person" [1]=> string(7) "company" }
Warning: array_flip() [function.array-flip]: Can only flip STRING and INTEGER values! in D:\app\phpstudy2014\WWW\test\testArray.php on line 26
array(1) { ["xxx信息技术有限公司"]=> string(7) "company" }
array(2) { ["小程"]=> string(4) "name" ["php工程师"]=> string(3) "job" }
bool(true)
bool(false)
bool(true)
string(6) "person"
向数组中添加元素
array_push($arr, $var) 在数组末尾添加,还可以直接 $arr[] = $var;
array_unshift($arr, $var) 在数组开头添加
从数组中取出元素
array_pop($arr) 从数组末尾取出并删除
array_shift($arr) 从数组开头取出并删除
3、数组排序
sort($arr, [$flag]) 数组元素从低到高排列
rsort($arr, [$flag]) 数组元素从高到低排列
4、数组间的函数

数组的差集(上图绿色部分或灰色部分)
array_diff($arr1,$arr2); 返回差集结果数组(注:如果参数$arr2在前,那么就表示灰色部分;$arr1在前就表示绿色部分)
array_diff_assoc($arr1,$arr2,$arr3); 返回差集结果数组,键名也做比较
数组的交集(上图红色部分)
array_intersect($arr1,$arr2);返回交集结果数组
array_intersect_assoc($arr1,$arr2);返回交集结果数组,键名也做比较
数组的合集(上图绿色+红色+灰色)
array_merge($arr1, $arr2)
更多php数组的介绍,请看 http://www.cnblogs.com/lhat/p/5882431.html
【php学习】数组操作的更多相关文章
- RX学习笔记:JavaScript数组操作
RX学习笔记:JavaScript数组操作 2016-07-03 增删元素 unshift() 在数组开关添加元素 array.unshift("value"); array.un ...
- matlab学习笔记11_1低维数组操作
一起来学matlab-matlab学习笔记11 11_1 低维数组操作repmat函数,cat函数,diag函数 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab ...
- Halcon学习(三)赋值与数组操作
assign : 对数据赋值,对数组的初始化.但不能对数组中的某一个值进行赋值. 举例:Tuple1 := [1,0,3,4,5,6,7,8,9] // 对数组进行初始化 Val := sin( ...
- Javascript数组操作
使用JS也算有段时日,然对于数组的使用,总局限于很初级水平,且每每使用总要查下API,或者写个小Demo测试下才算放心,一来二去,浪费不少时间:思虑下,堪能如此继续之?当狠心深学下方是正道. 原文链接 ...
- 005-Scala数组操作实战详解
005-Scala数组操作实战详解 Worksheet的使用 交互式命令执行平台 记得每次要保存才会出相应的结果 数组的基本操作 数组的下标是从0开始和Tuple不同 缓冲数组ArrayBuffer( ...
- js之数组操作
js之数组操作 前言 本文主要从应用来讲数组api的一些操作,如一行代码扁平化n维数组.数组去重.求数组最大值.数组求和.排序.对象和数组的转化等.(文章摘自:https://segmentfault ...
- js完整教程一 : 基本概念和数组操作
文章提纲 JS相关常识 JS基本概念 实践 总结 JS相关常识 js是一种可以与HTML标记语言混合使用的脚本语言,其编写的程序可以直接在浏览器中解释执行. 一.组成 js是一种专门为网页交互设计的脚 ...
- ES6之数组操作
es6中对于数组操作添加了4种方法: 1.map —— 映射(一个对应一个) 2.reduce —— 汇总(多个出来一个) 3.filter —— 过滤 4.forEach —— 迭代/循环. 1.m ...
- 前端深入之js篇丨Array数组操作从入门到成神Up Up Up,持续更新中
写在前面 随着前端深入的不断学习,发现数组这个数据结构在前端中有着相当大的存在感,由于我初学前端的时候并没有系统性的学习数组,所以我将通过这篇文章同你一起学习数组,希望我们能一起进步,学会熟练操作数组 ...
随机推荐
- Android_就像小朋友“搭积木”一样。
就像小朋友“搭积木”一样.感觉这句话很有意思.完整的话是这样的: Android提供了大量功能丰富的UI组件,开发者只要按一定规律把这些UI组件组合起来 --就像小朋友“搭积木”一样,把这些UI组件搭 ...
- 使用pm2常见问题
一.日志 1.pm2 的log怎么查看?(安装pm2后默认日志的路径为~/.pm2/),可以通过pm2 show (name)来查看某个进程下的日志地址 2.修改日志的输出路径,通过写一个程序启动的配 ...
- C++primer学习笔记(三)——Chapter 5
5.1 Simple Statements 1.记得每个语句后面加上”;”不过现在编译器都有实时编译,一般都不会忘记的, 2.空语句 (1)就是啥都没有.只有一个“:” (2)还是有很多用处的,例 ...
- 添加网页ico
<link rel="Shortcut Icon" href="/favicon.ico" />
- Android 返回键双击退出程序
/** * 菜单.返回键响应 */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == K ...
- android 制作自定义标题栏
1.在AndroidManifest.xml设置主题 android:theme="@android:style/Theme.NoTitleBar.Fullscreen" 2.在l ...
- SignalR —— Asp.net RealTime的春天
一般的例子:http://www.asp.net/signalr/overview/signalr-20/getting-started-with-signalr-20/tutorial-gettin ...
- UVa10917 A Walk Through the Forest(SPFA+记忆化搜索)
题目给一张有向图,问从起点1到终点2沿着合法的路走有种走法,合法的路指从u到v的路,v到终点的距离严格小于u到终点的距离. 先SPFA预处理出所有合法的路,然后这些路肯定形成一个DAG,然后DP一下就 ...
- Revit二次开发示例:ModelessForm_ExternalEvent
使用Idling事件处理插件任务. #region Namespaces using System; using System.Collections.Generic; using Autodesk. ...
- BZOJ4299 : Codechef FRBSUM
若$[0,i]$的数都可以得到,那么$[1,所有不大于i+1的数的和]$的数都可以得到. 如此暴力枚举答案,用可持久化线段树支持查询,因为每次数字至少翻一倍,所以复杂度为$O(m\log^2n)$. ...