php数组操作集锦- 掌握了数组操作, 也就掌握了php

作为只是作为一种生存手段, 搞技术不用钻牛角尖! 有些东西, 只要大致了解, 如果已经进行了深入的了解, 但还是不能解决,就不要继续了...

"专"相关的字, 只有 "钻" 金属旁的是zuan, 其余的都是 "zhuan" 包括: 转, 传, 专心.等等..

  1. 其时, 要想掌握php下的所有的: 数组/字符串 的操作函数, 那是不现实的, 你不可能把所有的函数都 记住清楚, 而且也没有必要! 还是那句老话, 把常用的记住, 其他的只是在需要的时候, 再查.

  2. 因为php 几乎包含了, 所有的, 满足一切的 数组/字符串的操作 函数. 因此, 如果遇到需求的代码, 需要数组或字符串的处理, 要先查阅 : 提供php的信息, 和需求, 然后看有没有相应的函数...
  3. 列表, 列表中同样可以使用其他markdown样式, 如列表中, 使用 井号等等..

程序元的美德!
the three chief virtues of a programmer are : laziness, impatience, hubris...
懒惰, 追求自动化;
急躁,不耐烦,
hubris: 狂妄,自大,傲慢...
让一切都尽可能自动化起来的哲学起源于'
UNIX世界的哲学:

    小即是美让程序只做好一件事尽可能早地创建原型(然后逐步演进)数据应该保存为文本文件每个工具只做且做好一件事工具可以协作起来一切面向文本 (一切尽量以 配置文件 ini的方式来实现)...避免使用可定制性低下的用户界面

在linux下, 有很多的工具和命令行, 来处理繁琐的, 复杂的配置工作, 比如apache的配置, 等等....


参考下面的文章, 是很好的:
http://www.cnblogs.com/staven/p/5142515.html
http://pcwanli.blog.163.com/blog/static/453156112010111441852254/

php为什么如此强大好用? 很重要的一个因素是, 它提供了众多的 功能强大的 内置函数.而且这些函数是非常灵活的,"有句套话是: php做到了怎么方便怎么来, 怎么好用就怎么用", 基本上你想到的功能, 函数都提供了. 基本上你不用自己去编写处理函数了, 你只需要编写自己的 逻辑函数和 业务函数就好了.

php编程的一个基本思想, 由于 php是弱类型语言, 函数中的参数, 没有指定/ 规定 参数的 数据类型, 也没有规定返回值的类型, 因此, 在使用函数的时候, 一定要 时时 考虑, 或者检查参数的数据类型, 要事先对参数 类型作检查处理: if(is_file, is_array()...is_string...is_numeric...)等等, 因为不同类型 的参数传入时, 返回值甚至 返回类型都是不同的 也要对函数的返回值 作处理. 而且要注意 类型的隐含 转换和相等.

同时, php函数, 也大量使用 参数的 省略值, 所以, 在使用函数的时候, 也要时时提醒自己, 函数是否有省略值, 不要以为函数的 原型就是 你平常使用的那样!

常说php有很多坑, 可能就是说的上面的亮点吧???

php的两个主要操作点就是, 数组和字符串. 而数组的操作更多. 基本上, 只要掌握了数组的操作, php就完了. 因此, 平时编程的思路就是, 尽量把 问题, 转化成 数组来进行处理.


取数组的值或键:
array_keys($array): 取出键, 用数字索引
array_keys($array, '四川'); 也可以 根据值, 只取出指定 value的 键.

array_values($array): 取出数组的值, 主要有两个使用场合和作用, 一是只需要值, 去掉key, 二是原来的keys比较混乱, 要去掉原来的keys.

注意区分 array_keys和 key函数 的区别?

array数组, 本身就提供了 遍历 数组内的元素的 方法,(通过数组内部的指针的移动) 如 获取当前元素的key值和元素值的函数: key(), current(), 注意这个不是value. 而数组指针的移动有: next(), previous(), last(), 最前面的指针方法: reset().

注意, 对php中的数组操作函数, 由于php对数组的处理, 是按照数组来处理的, 不是按照对象来处理的, 所以, 基本上关于数组的操作, 都是 全局函数, 而不是 对象的点 操作方式.

数组中, 三个搜索函数in_array, array_search, array_key_exists的区别?

  1. in_array和array_search
    两者都是判断 数组元素的值 是否存在, 但是两者的返回值 不同.
    in_array是判断 数组元素的值 是否存在, 返回值是bool类型, 存在为true, 不存在为false.
    array_search 是判断数组元素的值 是否存在, 但是它返回的是 如果元素值存在返回对应的key值 , 如果不存在,也返回false,就是说, array_search返回的是key值.

  2. arry_key_exists和isset
    这两者搜索的是数组元素的key. 区别是, 如果key对应的元素值为null或false, 则isset返回false, 而array_key_exists仍然返回true.注意后者函数的用法, arry_key_exists参数的顺序是: array_key_exists('要查询的key', $arr); 参数的顺序不要搞反了.


怎样才能做到 写代码就像写文章一样优雅, 有趣??? 其实, 写英文文章写多了, 你就会有那种感觉了,用写英文文章的思路和习惯来写代码, 你就不会感到累! 感觉写代码写起来就是一件很 有韵律, 很优雅的一件事, 自然你的代码就会" 显得 " 更好, 你的感觉也会更好. 一个最重要的原则就是, 写代码要 以 "单词" 为单位, 除了大中小括号外, 其余的单词之间都要用空格加以分隔. 当然, 最严格的是连各种括号都要分隔, 但是那样可能会影响写代码的速度.一般做到上面 两点就不错了.

数组的快速生成?

使用range函数, 可以快速的生成 指定范围内的 数组值. $arr = arrage(1, 10); 这时 $arr就是数组了. 但是, 要注意, 这样的话, 数组的值是1, 到 10, 而数组的下标的值 却是: 0 ~ 到 9.


array_merge和array_combine的区别

前者是元素值的组合, 而后者是两个数组, 一个作为keys, 另一个作为values的对应 结合.

数组搜索的区别?

isset和array_key_exists是 搜索key, 两者的区别是前者对于key=>null, 返回的是false, 后者即使是key=>null也返回true
in_array和array_search是 搜索value, 但是in_array返回的是值是否存在的true/false. 而array_search返回的是 false(不存在值时),值存在时则返回对应的key

array_filter和 array_map的区别? 对数组元素过滤?

array_filter 是对数组元素 使用 callback function 函数进行 过滤. 有的元素, 会被 removed. 在过滤 flase, null ,""而保留 0时, 要使用 strlen作callback函数

array_filter函数的特点: 第一, 它不会改变 数组元素的本身, 元素本身的值跟你的return 完全没有关系! 这一点必须明确, 不管你的回调函数如何写! 第二, 它是根据 return的值的 false/true, 来决定去留的, 就这么单纯.

而 array_map则是对所有的数组元素, 都使用 回调函数, 它不会 过滤/删除元素的. **和array_filter不同的是, 它们的参数顺序不同! 由于array_map可以 带多个数组, 如 $arr1, $arr2..., 所以 要处理的 数目/个数不确定的 数组序列 要放在函数的后面, 因此, 第一个参数 是 callback, 这个跟 array_filter第一个参数是数组, 第二个参数才是callback不同!

特别注意的是, 如果array_map的第一个参数callback是null的时候, 后面是多个数组时, 返回的是由这些数组组成的二维 数组, 但是,不同于 array_merge! (array_merge返回的是一维 数组!!!)

array_map? 和 array_walk?

array_map 的主要目的是对数组的元素使用 函数回调处理, 目的是为了返回处理后的数组;
array_walk 的主要的目的是, 依次取出数组中的元素, 然后做处理, 目的是为了处理后的结果.如同foreach一样, 也是遍历数组中的元素, 取出来进行处理. 但是, foreach处理的代码是 {代码块....}, 而array_walk更进一步, 是用一个完整的函数来进行处理的. (同样的, 需要一个全局函数, 如果是在类里面, 也要使用 lamda匿名函数). 如果使用array_walk对 数组中的原元素进行处理, 就要在自定义函数中传入 元素的 引用, 参数的顺序是: &$v, $k

对于php而言, 表达式返回的值, 如果是赋值表达式, 则返回的是, 被赋值的变量的值, 如果没有赋值, 只是算数表达式, 则返回算术式子的计算结果.

对于array_walk, 由于不需要返回值, (只是处理), 所以, 最后并不需要写 return 语句, 而且, 这里, 即使你写了return语句, 也没有任何效果(因为return不产生输出!)而 array_walk 的返回值是逻辑值, 即boolean,是看回调函数是否应用成功,即回调函数是否出错的布尔值! 但是对于 array_map(和array_filter也是这样), 由于最后要返回值, 所以一定要加 return语句, 否则, 如果只是赋值, 如: $v = $v * 2; 由于没有返回值, 所以最后返回的数组元素值都是null.

php5.3的回调函数和闭包! 因此, 今后就可以像写js那样灵活的, 舒服的写回调函数了!!

php中的大量函数使用了 回调函数(callable callback). 在php5.3之前, 由于不支持 lamda函数和闭包, 所以必须先定义一个函数, 然后, 再传入这个函数名的字符串. 这个就比较麻烦. 从5.3开始, 就可以 使用 匿名函数和闭包了.
lamda函数: 从Lisp系的scheme语言而来的, 在scheme语言中,定义一个匿名函数就是用 lamda关键字的.
lamda函数, 就是通常所说的匿名函数.用法如同在javascript中大量使用的匿名函数一样. 匿名函数的用法有这样几种:

  1. 将匿名函数赋值给一个变量, 然后通过变量来调用函数. $lamda = function () {....}; $lamda();
  2. 在php的函数中, 凡是需要 callback的地方, 都直接用 lamda函数: 如 array_filter($arr, function($v){..}
    **第二种方式中, 在 类 里面使用 回调函数的时候, 就 非常有用了! 就不会很麻烦地使用 类方法作回调函数名称了! 而且如果你直接使用 "类的方法(不管是public还是private的)作为回调函数都是不行的.., 即使你使用 '$this-> callback_class_method' : 因为回调函数要求的是, 一个 "全局函数"

在中文输入法中, 由于大多数输入法都支持 "直接上文/直接显示在"正文"中", 所以输入时, 用不着看输入条, 直接看输入的正文就好了. 经常发生的/ 为什么老是出错呢?是因为你在输入的时候, 实际上, 眼睛是处于 "暂时的 盲点 /黑视"的.


prag'matic: 务实的, 切合实际的: we need to adopt a more pragmatic approach.

php的匿名函数和闭包的区别?

<script type="text/javascript">
function(){  // 这个就是匿名函数, 即只是写function, 不写函数名var i=1;function b(){  // 闭包就是一个函数中 再定义的 函数. 闭包可以使用 包含它的函数中的 变量...++i;return i;}return b;
}
var c=a();
alert(c());
</script>

闭包会携带它的函数的作用域,因此会比其他函数占用更多的内存,所以使用闭包要非常注意!!!

  1. list函数,“列表”, 表示将数组中 对应的 元素值 相应的赋值给 多个变量...
    explode和implode是在数组和字符串之间转换, 转换的分隔符不能为空: 如果delimiter为空, 则
    会产生一个警告: empty delimiter...

  2. 数组排序用sort, 这个sort($arr)是改变$arr这个数组本身的, 不是返回一个排序后的数组, sort返回的是一个bool值, 看是否排序成功...
    数组倒序用array_reverse, 这个倒序是不分 大小等, 绝对的按顺序颠倒的... 而array_flip是数组翻转, 是将key和value进行翻转...

  3. php数组还是使用 array(1,2,3,4)的形式, 不使用[1,2,3,4]. 很多时候, 好像会出现解析错误!











本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/283167.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

.NET MAUI实战 Navigation

1.概要用过WPF的小伙伴一般都用过Prism&#xff0c;Prism里面的导航概念在MAUI中也有类似的概念&#xff0c;在MAUI中是直接集成在框架中我们不需要安装任何其他的nuget包。直接使用Navigation对象即可,通常在移动平台中使用的更多&#xff0c;桌面程序中。我们先来看看微软官方…

mysql 修复表 阿里云_MySql数据表修复方法-阿里云开发者社区

mysqld进程在一个写入当中被杀死。计算机的意外关闭(例如&#xff0c;如果计算机掉电)。一个硬件错误这章描述如何检查和处理在MySQL数据库中的数据损坏。如果你的表损坏很多&#xff0c;你应该尝试找出其原因&#xff01;见G.1 调试一个MySQL服务器。在执行崩溃恢复时&#xf…

关于响应式布局,你必须要知道的

一、前言 响应式Web设计可以让一个网站同时适配多种设备和多个屏幕&#xff0c;可以让网站的布局和功能随用户的使用环境&#xff08;屏幕大小、输入方式、设备/浏览器能力&#xff09;而变化。本文主要介绍一些响应式布局容易忽略但又很重要的知识点。 二、视口 移动前端中常说…

python报错 scrolled: false_python 元组tuple - python基础入门(14)

文章首发微信公众号&#xff0c;微信搜索&#xff1a;猿说python在上一篇文章中我们讲解了关于python列表List的相关内容&#xff0c;今天给大家解释一下列表List的兄弟 – 元组&#xff0c;俗称: tuple.元组tuple和列表List类似&#xff0c;元组有如下特点&#xff1a;1.由一个…

SpringBoot集成Druid不支持多条SQL

在DataSource 初始化Bean 添加 List<Filter> proxyFilters new ArrayList<Filter>();WallFilter statFilter new WallFilter();WallConfig config new WallConfig();config.setMultiStatementAllow(true); // 批量操作statFilter.setConfig(config);proxyFilte…

搭建 vue2 单元测试环境(karma+mocha+webpack3)

从网上找了很多例子关于单元测试&#xff0c;都是如何新建项目的时候的添加单元测试&#xff0c;用vue-cli中怎么添加&#xff0c;但是我的项目已经生成了&#xff0c;不能再一次重新初始化&#xff0c;这时如何添加单元测试&#xff0c;这里面遇到了好多坑&#xff0c;写在这里…

开放原子开源峰会 - SmartIDE正式开源并发布v1.0版本丨IDCF

在上周刚刚结束的【2022开放原子全球开源峰会】上 SmartIDE作为正在进行开放原子基金会TOC审核的开源项目&#xff0c;在云原生论坛上向全球的开源开发者介绍了下一代云原生CloudIDE的全新使用体验&#xff0c;并且正式发布了 SmartIDE v1.0 版本。作者&#xff1a;徐磊文章首发…

【算法学习】网络流模板……

网络流最大流&#xff08;最小割&#xff09;Dinic模板…… 1 const int INF99999999; 2 const int Maxn; 3 const int Maxm; 4 inline int Min(int p,int q){return p<q?p:q;} 5 int n,m,h[Maxn5],to[Maxm*25],cap[Maxm*25],nxt[Maxm*25],tot1,Sum0,que[Maxn5],l,r,lv[Max…

给初学者的 RxJava2.0 教程 (八)

Outline [TOC] 前言 在上一节中, 我们学习了FLowable的一些基本知识, 同时也挖了许多坑, 这一节就让我们来填坑吧. 正题 在上一节中最后我们有个例子, 当上游一次性发送128个事件的时候是没有任何问题的, 一旦超过128就会抛出MissingBackpressureException异常, 提示你上游发太…

mysql数据库的目录_了解MySQl数据库目录

数据库目录是MySQL数据库服务器存放数据文件的地方&#xff0c;不仅包括有关表的文件&#xff0c;还包括数据文件和MySQL的服务器选项文件。不同的分发&#xff0c;数据库目录的缺省位置是不同的。数据目录的位置缺省的数据库位置缺省数据库的位置编译在服务器中。◆如果您是在…

修改docker的默认存储位置及镜像存储位置

2019独角兽企业重金招聘Python工程师标准>>> 方法一、软链接 默认情况下Docker的存放位置为&#xff1a;/var/lib/docker 可以通过下面命令查看具体位置&#xff1a; sudo docker info | grep "Docker Root Dir" 解决这个问题&#xff0c;最直接的方法当然…

微信小程序第三方服务公司有哪些

虽然微信小程序还没有正式推出&#xff0c;但围绕着微信小程序第三方服务公司之间的战争早已经开始。他们在小程序生成工具&#xff08;一键生成小程序&#xff0c;无需开发&#xff09;、微信小程序开发工具、小程序数据统计等领域展开激烈竞争&#xff0c;我们一起来看看微信…

python maketrans_Python maketrans()方法 - Python 教程 - 自强学堂

Python maketrans()方法描述Python maketrans() 方法用于创建字符映射的转换表&#xff0c;对于接受两个参数的最简单的调用方式&#xff0c;第一个参数是字符串&#xff0c;表示需要转换的字符&#xff0c;第二个参数也是字符串表示转换的目标。注&#xff1a;两个字符串的长度…

Blazor University (49)依赖注入 —— 比较依赖范围

原文链接&#xff1a;https://blazor-university.com/dependency-injection/dependency-lifetimes-and-scopes/comparing-dependency-scopes/比较依赖范围源代码[1]在本节中&#xff0c;我们将创建一个 Blazor 应用程序来演示各种依赖注入作用域的不同生命周期。为此&#xff0…

CSS选择器的权重与优先规

我们把特殊性分为4个等级&#xff0c;每个等级代表一类选择器&#xff0c;每个等级的值为其所代表的选择器的个数乘以这一等级的权值&#xff0c;最后把所有等级的值相加得出选择器的特殊值。 4个等级的定义如下&#xff1a; 第一等&#xff1a;代表内联样式&#xff0c;如: st…

设计模式概论

此文转载于 http://blog.csdn.net/hguisu/article/details/74968191. 设计模式设计模式&#xff08;Design pattern&#xff09;是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性…

只需要2个工具,百度云盘大文件就能用迅雷和IDM下载

不会代码&#xff0c;不懂脚本&#xff0c;没关系 &#xff0c;能找到一座通往它们的桥梁&#xff0c;照样能到达彼岸。 这里以360极速浏览器为例。 在浏览器地址框输入以下地址直接到达浏览器安装扩展插件的地方&#xff08;偷个懒&#xff0c;复制网址吧&#xff09;&#xf…

rsync服务器的配置

一、rsync 简介Rsync&#xff08;remote synchronize&#xff09;是一个远程数据同步工具&#xff0c;可通过LAN/WAN快速同步多台主机间的文件&#xff0c;也可以使用 Rsync 同步本地硬盘中的不同目录。 Rsync 是用于取代rcp的一个工具&#xff0c;Rsync使用所谓的 “Rsync 算法…

用ajax连接mysql_页面用ajax实现简单的连接数据库

(1) 写发送代码var myXmlHttpRequest "";myXmlHttpRequest getXmlHttpRequest();if (myXmlHttpRequest) { //xmlHttpRequest创建成功了&#xff0c;才能发送请求//地址一定要写正确var url "../zhuCe/zhuCeYanZheng.aspx?username" $(Text1).value;m…

Vue学习笔记入门篇——数据及DOM

本文为转载&#xff0c;原文&#xff1a;Vue学习笔记入门篇——数据及DOM 数据 data 类型 Object | Function 详细 Vue 实例的数据对象。Vue 将会递归将 data 的属性转换为 getter/setter&#xff0c;从而让 data 的属性能够响应数据变化。对象必须是纯粹的对象(含有零个或多个…