PHP数组

数组是对大量数据进行有效组织和管理的手段之一,通过数组的强大功能,可以对大量性质相同的数据进行存储、排序、插入及删除等操作,从而可以有效地提高程序开发效率及改善程序的编写方式。

数组:是一组有序成员(键值对)的集合

  1. 索引数组
  2. 关联数组
// 索引数组:键是从0开始递增的正整数
$arr = [a,b,c,d];
// 除了中括号声明数组也可以用array
$arr1 = array(11,22,33,44);
echo "<pre>";
print_r($arr);
print_r($arr1);
// 索引数组访问
echo $arr[0],$arr[2];
// 更新数组
$arr[3] = 666;
echo "<hr>";// -----------------------
// 关联数组:键是“语义化”字符串 如:id uname email
$user = ['id'=>1,"email"=>'2602138376@qq.com','uname'=>'zhang'];
echo "<pre>";
print_r($user);
echo user['uname']; // zhang
// 我们也可以直接赋值时创建
$info['name'] = 'zhang';
var_dump($info);

二维数组和多维数组

// 二维数组 数组中含有数组 [[],[],[]]
$arr = [['username'=>'zhang','email'=>'1568@qq.com'],['username'=>'admin','email'=>'admin@qq.com'],['username'=>'shuai','email'=>'26021@qq.com']
];
echo "<pre>";
print_r($arr);
// 访问二维数组
echo $arr[1]['uname']; // admin
// 使用foreach遍历二维数组中每一项
foreach($arr as $k=>$v){echo $v["uname"].$v["email"]."<br>";
}
// foreach 遍历对象
$obj = new class{public $name = 'admin';public $email = 'admin@php.com';public $gender = true;
};
foreach($obj as $key=>$value){printf("[%s => %s] <br>",$key,$value);
}

快速生成数组函数

range() :https://www.php.net/manual/zh/function.range.php

// range(开始值,结束值,步长)
// 快速生成1-10的数组
$arr1 = range(1,10);
print_r($arr1);
/* Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 [5] => 6 [6] => 7 [7] => 8 [8] => 9 [9] => 10 )*/// step 参数 每次增加的步长
// 生成0 10 20 30 到10的数组
$arr2 = range(0, 100, 10);
print_r($arr2);
/*Array ( [0] => 0 [1] => 10 [2] => 20 [3] => 30 [4] => 40 [5] => 50 [6] => 60 [7] => 70 [8] => 80 [9] => 90 [10] => 100 )*/// 也可以生成字母a到i
$arr3 = range('a', 'i');
print_r($arr3);
/* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g [7] => h [8] => i )*/echo implode("",range("6 ","Q"));  //space after the 9
// prints 6789:;<=>?@ABCDEFGHIJKLMNOPQ

添加数组元素函数

array_unshift:https://www.php.net/manual/zh/function.array-unshift.php

array_push:https://www.php.net/manual/zh/function.array-push.php

$arr = [22,33,44,55];// array_unshift() 在数组头部添加元素
array_unshift($arr,11);// array_push() 在数组尾部添加元素
array_push($arr,66);
print_r($arr);
/* Array ( [0] => 11 [1] => 22 [2] => 33 [3] => 44 [4] => 55 [5] => 66 )*/

删除数组元素函数

array_shift:https://www.php.net/manual/zh/function.array-shift.php

array_pop:https://www.php.net/manual/zh/function.array-pop.php

array_slice:https://www.php.net/manual/zh/function.array-splice.php

$arr = range(a,g);
// 删除头部数组元素
print_r($arr);
/* Array ( [0] => a [1] => b [2] => c [3] => d [4] => e [5] => f [6] => g )*/
// 删除头部元素a 返回删除的数组元素
echo array_shift($arr); // a
print_r($arr);
/* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f [5] => g )*/// 删除尾部数组元素
echo array_pop($arr); // g
print_r($arr);
/* Array ( [0] => b [1] => c [2] => d [3] => e [4] => f ) */// array_splice 去掉数组中的某一部分并用其它值取代// 一个参数的时候 从当前位置删除到最后
$input = array("red", "green", "blue", "yellow");
array_splice($input, 2);
var_dump($input);
/* array(2) { [0]=> string(3) "red" [1]=> string(5) "green" } */// 两个参数,删除从开始位置到结束位置的元素
$input = array("red", "green", "blue", "yellow");
array_splice($input, 1, 2);
var_dump($input);
/* array(2) { [0]=> string(3) "red" [1]=> string(6) "yellow" } */// 三个参数,将开始位置和结束位置的元素替换为指定元素
$input = array("red", "green", "blue", "yellow");
// 注意:负数是从后往前数 -2 -1 0 相当于 第二个到倒数第二个 green blue
array_splice($input, 1, -1, array("black", "maroon"));
var_dump($input);
/* array(4) { [0]=> string(3) "red" [1]=> string(5) "black" [2]=> string(6) "maroon" [3]=> string(6) "yellow" }*/

数组键值操作函数

array_keys 获取数组的键组成的数组

https://www.php.net/manual/zh/function.array-keys.php

$staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];
$res = array_keys($staff);
print_r(implode("---",$res));
/* id---name---gender---age---salary */

array_key_exists():判断数组的键名或索引是否存在

https://www.php.net/manual/zh/function.array-key-exists.php

$staff = ['id'=>1,'name'=>'zhang','gender'=> true,'age'=>18,'salary'=>666];
// 遍历方式查找索引名
$res = false;
foreach($staff as $key=>$value){if($key==='age'){$res = true;}
}
echo $res?"存在":"不存在";// 利用系统内置函数实现 array_key_exists()
$res = array_key_exists("gender",$staff);
echo $res?"存在":"不存在";

array_search — 在数组中搜索给定的值,返回该值对应的索引

https://www.php.net/manual/zh/function.array-search.php

// array_search — 在数组中搜索给定的值,如果成功则返回首个相应的键名
$array = array(0 => 'blue', 1 => '52', 2 => 'green', 3 => 52);
echo array_search('green', $array); // $key = 2;
echo  array_search(52, $array);   // $key = 1;
// 第三个参数 true,则将在数组中检查完全相同的元素 true  === false ==
echo array_search(52, $array,true);   // $key = 3;

in_array() 检查数组中是否存在某个值,存在返回true 否则false

https://www.php.net/manual/zh/function.in-array.php

<?php
$a = array(array('p', 'h'), array('p', 'r'), 'o');if (in_array(array('p', 'h'), $a)) {echo "'ph' was found\n";
}if (in_array(array('h', 'r'), $a)) {echo "'hr' was found\n";
}if (in_array('o', $a)) {echo "'o' was found\n";
}
/*'ph' was found'o' was found*/
// 第三个可选参数,同样是 true 严格比较=== 默认为false ==
?>

array_values 返回数组中所有的值,并给其重新建立数字索引

https://www.php.net/manual/zh/function.array-values.php

$array = array("size" => "XL", "color" => array("gold",'red',"green"));
echo "<pre>";
print_r(array_values($array));
// 关联数组已被修改为 0 1 2 的索引数组且按照顺序
/*
Array
([0] => XL[1] => Array([0] => gold[1] => red[2] => green))
*/

常用数组回调函数

array_walk 使用自定义函数对数组中的每个元素做回调处理

https://www.php.net/manual/zh/function.array-walk.php

$fruits = array("d" => "lemon", "a" => "orange", "b" => "banana", "c" => "apple");
// 回调函数的三个形参分别为: 数组的值 ,数组的键,自定义传递的参数
function test_alter(&$item,$key,$prefix){$item = "$prefix: $item";
}
function test_print($item, $key)
{echo "{$key}.  {$item}<br />\n";
}
array_walk($fruits, 'test_print');
echo "<hr>";
$fruits = array_values($fruits);
array_walk($fruits, 'test_print');
echo "<hr>";
// 参数分别为:数组、回调函数、回调函数的参数……
array_walk($fruits, 'test_alter', 'fruit');
// 也可以直接传递一个匿名函数
array_walk($fruits, function ($item, $key)
{echo "{$key}.  {$item}<br />\n";
});
/*
d. lemon
a. orange
b. banana
c. apple
---------------------------------
0. lemon
1. orange
2. banana
3. apple
--------------------------------
0. fruit: lemon
1. fruit: orange
2. fruit: banana
3. fruit: apple
*/// array_walk的回调函数也可以使用闭包use关键字获取全局变量
下面我们来做一下,给我们最喜欢吃的水果加上My favorite
$favorite = 'fruit: orange';
array_walk($fruits,function(&$item,$key,$suffix)use($favorite){if($item == $favorite){$item .= $suffix;}
},' My favorite');
echo "<hr>";
array_walk($fruits, 'test_print');
/*
0. fruit: lemon
1. fruit: orange My favorite
2. fruit: banana
3. fruit: apple*/

array_map — 为数组的每个元素应用回调函数

https://www.php.net/manual/zh/function.array-map.php

// array_map() 该函数和array_walk功能相似,也是利用回调函数对数组进行处理,只是参数顺序不同
// 返回处理过后的数组,第一个参数回调函数,第二个为数组
$arr = array_map(function($v){return $v*2;
},[1,2,3,4,5]);
echo implode(",",$arr);
// 2,4,6,8,10

array_filter() 使用回调函数过滤数组中的元素

https://www.php.net/manual/zh/function.array-filter.php

$arr = array_filter([1,2,7,8,10,98],function($v){return $v>=7;
};
echo "<pre>";
print_r($arr);  /*Array
([2] => 7[3] => 8[4] => 10[5] => 98
)
*/
// 但是我们看到,过滤后的数组的索引不是从零开始的了,我们需要使用arrya_values处理一下
$res = array_values($arr);
echo "<pre>";
print_r($res);        /*Array
([0] => 7[1] => 8[2] => 10[3] => 98
)
*/

数组键值排序函数

函数 说明
sort() 对数组元素进行升序排序(从小到大)。
rsort() 对数组元素进行降序排序(从大到小)。
asort() 对数组元素进行升序排序(从小到大),并保持索引关系。
arsort() 对数组元素进行降序排序(从大到小),并保持索引关系。
ksort() 按照数组的键值对数组进行升序排序(从小到大),并保持索引关系。
krsort() 按照数组的键值对数组进行降序排序(从大到小),并保持索引关系。
// count()和sizeof():获取数组长度 implode():数组转字符串
$num = [8,4,6,7,2,3,18,32,1,23];
echo "count计算数组长度为".count($num)."<br>"; // 10
echo "sizeof计算数组长度为".sizeof($num)."<br>"; // 10
echo implode(',',$num)."<br>"; // 8,4,6,7,2,3,18,32,1,23// 使用sort排序后的数组(sort升序rsort降序)
sort($num);
echo implode(',',$num)."<br>"; // 1,2,3,4,6,7,8,18,23,32
echo "<pre>";
print_r($num);
/*
Array
([0] => 1[1] => 2[2] => 3[3] => 4[4] => 6[5] => 7[6] => 8[7] => 18[8] => 23[9] => 32
)
*/// asort()排序,键值保持原有关系(asort升序arsort降序)
$num = [8,4,6,7,2,3,18,32,1,23];
asort($num);
echo implode(',',$num)."<br>"; // 1,2,3,4,6,7,8,18,23,32
echo "<pre>";
print_r($num);
/*
Array
([8] => 1[4] => 2[5] => 3[1] => 4[2] => 6[3] => 7[0] => 8[6] => 18[9] => 23[7] => 32
)
*/

数组内部指针操作

current():返回数组的当前元素

key():返回数组中当前元素的键名

next()与prev():向上/下移动数组指针

reset()和end():将数组内部指针指向数组第一个/最后一个元素

list():把数组中的值赋给一组变量(数组解构)

$arr = ['red','yellow','blue','pink','green','gay'];
echo current($arr); // red
echo key($arr); // 0
next($arr);
echo current($arr); // yellow
next($arr);
echo current($arr); // blue
end($arr);
echo current($arr); // gay
echo current($arr); // gay
reset($arr);
echo current($arr); // red
list($a,$b,,$d)=$arr;
echo $a,$b,$d; // red yellow pink

数组截取函数 array_slice

$num = [11,22,33,44,55,66];
echo "<br>截取的元素:";
print_r(implode(',',array_slice($num,2,3));
// 截取的元素:33,44,55

更多相关数组函数

在 PHP 开发过程中,有相当大的部分是与数组打交道,例如入库的内容、统计相关内容等操作都离不开数组,很多信息都是用数组作为载体的。所以数组的操作在 PHP 编程中占有很大的比重,只有熟练地操作数组才能更好的编写 PHP 程序。

除了前面我们介绍到的一些函数外,PHP 中还提供了很多特定功能的数组函数,本节我们就来归纳一下 PHP 中常用的数组处理函数。

访问PHP手册 https://www.php.net/manual/zh/ref.array.php 来查看更详细的内容

数组的键/值操作:

  • array_keys():获得数组中的键名
  • array_values():获取数组中所有元素的值
  • array_flip():交换数组中的键和值
  • array_key_exists():检测键名是否位于数组中
  • array_search():在数组中搜索给定的值并返回键名或索引

数组的拆分、合并:

  • array_slice():截取数组的一部分
  • array_merge():数组合并
  • array_chunk():分割数组

数组的填充与清除:

  • array_splice():删除数组中的某一部分并用其它值取代
  • array_pad():用给定的值填充数组
  • array_push():在数组尾部插入元素
  • array_pop():删除数组末尾的元素
  • array_shift():删除数组开头的元素
  • array_unshift():在数组开头插入元素
  • array_fill():以填充数据的方式创建新数组
  • array_fill_keys():使用指定的键和值来填充数组

数组的计算:

  • array_sum():计算数组中所有元素的和
  • array_product():计算数组中所有元素的乘积

其它数组函数:

  • is_array():判断是否为数组
  • array_rand():随机获取数组元素
  • shuffle():随机打乱数组

今日份作业

  1. 如何将以下二维数组里的键值name换成user ,其他保持不变? $data = [[‘name’=>‘zhangdan’,‘id’=>2],[‘name’=>‘lisi’,‘id’=>1]];
<?php
$data = [['name'=>'zhangdan','id'=>2],['name'=>'lisi','id'=>1]];
echo "<pre>";
print_r($data);
array_walk($data,function(&$arr,$k,$name){$arr[$name]=$arr['name'];unset($arr['name']);
},'user');
echo "<pre>";
print_r($data);
?>
  1. 生成一个由1-100组成的数组,要求返回该数组中的偶数组成的新数组,并且新数组的索引从0开始?
<?php$arr = range(1,100);print_r($arr);$res = array_filter($arr,function($v){return $v%2==0;});print_r(array_values($res));
?>

今日份语录

大多数的痛苦,都是因为自己跟自己过不去。心是收藏快乐的,别让它困于计较中,最后都盛了痛;别总执迷于困境,挤走原本难得的快乐。

【php基础入门】PHP中常用的数组操作使用方法笔记整理(推荐)相关推荐

  1. js中常用的数组和字符串方法

    一:js中常用的数组方法 <script>//函数声明式中的方法const arr=[1,3,6,9,15,19,16];//函数的所有方法 map(),reduce(),filter() ...

  2. js中常用到的一些解决问题方法(整理一些真正有效能够使用到项目中的方法)(等待不断更新积累)

    目录 将字符串中某个字符串删除 includes() 方法用于判断一个字符串是否包含在另一个字符串中,根据情况返回 true 或 false. 筛选 排序 控制页面内所有console.log是否在控 ...

  3. javaScript数组操作--有道笔记整理

    javascript之数组操作 1.数组的创建 var arrayObj = new Array(); //创建一个数组 var arrayObj = new Array([size]); //创建一 ...

  4. ios 字符串转数组_ES6中常用的数组操作-必须收藏

    来源:https://www.jianshu.com/p/a1f43027d3fd 判断是否为数组: const array = new Array();array instanceof Array; ...

  5. JavaScript常用的字符串操作对象方法

    文章目录 ==对象方法== ++搜索.索引 `indexOf() ` :搜索首个字符串出现的位置 `lastIndexOf() `:搜索最后出现的字符串位置 `includes() `:搜索判断字符串 ...

  6. 总结JS中常用的数组的方法大全

    总结JS中常用的数组方法 JS中常用的数组方法总结 数组(Array)是一种复杂的数据类型,它属于Object(对象)类型,用来将一组数组合在一起,通过一个变量就可以访问一组数据.在使用数组时,经常会 ...

  7. LeetCode中常用语言的一些基本方法记录

    文章目录 LeetCode中常用语言的一些基本方法记录 Java 数组 数组的常用操作及方法 Arrays工具类 Collections类常用方法总结 二维数组 字符串常用属性及方法 JavaScri ...

  8. 简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

    优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能.编程语言中,数组是一个非常重要的概念,也是一种很常用的类型.本文中通过javascript语言的代码实例,展现编程中数组的魅力.在javasc ...

  9. ps抠图基础篇:最常用的四种抠图方法

    ps抠图基础篇:最常用的四种抠图方法 一.善用魔术棒法 用魔法帮抠图是最直观明了的抠图方法,也是最基础的抠图方法,适用范围是图像和背景色差非常明显,背景颜色单一,图像边界清晰. 魔法棒抠图就是通过删除 ...

最新文章

  1. SystemCenter2012SP1实践(6)SCVMM管理XenServer
  2. mysql文字字符集_MySQL字符集
  3. shader 隐身_如何超越隐身障碍
  4. 用JS实现移动的窗口
  5. 2017 成为更好的自己需要做的事情
  6. *第6章 判别分析及R使用
  7. JavaWeb:cookies和storage的区别
  8. 微信刷投票软件手机版、微信免费刷票软件建立的原理解析
  9. 联想微型计算机扬天s711怎么拆,如何优雅的拆掉一体机电脑 Lenovo 联想 扬天S5250...
  10. 【bat】批处理中的行,段注释
  11. 为什么计算机连不上无线网络,为什么电脑连不上wifi(wifi正常 电脑连不上网)
  12. 两人互殴打架派出所如何处理
  13. Latex论文复杂组合图片设计
  14. 小程序——picker组件
  15. 微信开放标签wx-open-launch-app
  16. python五个月工资多少_Python工程师工资多少
  17. Android 自定义计时器
  18. 批量查找替换excel单元格中的软回车(alt + enter)
  19. mac os之监听触摸板(捏合、旋转、三指)
  20. Pytorch预训练模型加载

热门文章

  1. 【西电9031考研复试】操作系统-学习笔记
  2. 程序员编程艺术:第三章、寻找最小的k个数
  3. 一款好用的Linux系统服务器性能监控分析工具介绍
  4. PHP sort() 函数等
  5. C++——书写HelloWord
  6. 参考文献中英文人名_参考文献中英文人名的缩写规则 (2)
  7. Jsp+Servlet 的一个JavaWeb项目千里眼影视售票院
  8. Android应用如何跳转到应用市场详情页面
  9. 局域网远程开机工具 一键批量远程唤醒
  10. 数据治理--数据管理标准规范的初步认识