PHP中通过回调遍历处理数组元素

作者:代码可乐    发布日期:2017年8月4日


在PHP中,使用array_map、array_walk函数,可以很方便地遍历(循环)并处理数组中的元素,它们都提供一个回调参数。下面谈一谈用法。

array_map原型

先看array_map函数,原型如下:

第一个参数指定回调函数,接受一个参数:元素的值。第二个及后续参数指定预处理的一个或多个数组。返回结果为处理后的数组。

array_map实例1

我们先看下如何处理一个数组的情况,直接看一下实例:

运行结果:

此实例中,通过自定义的回调函数,取出了数组中指定元素的值做格式处理,并从回调函数中返回。array_map函数返回的数组中,包含了每个元素的处理结果。

要点:

  1. array_map函数的数组参数($cities),只能通过传值方式传递。
  2. 数组参数($cities)中的key,将保留在结果数组($mapCities)中。

array_map实例2

我们看下如何处理多个数组的情况。适用的场景是,在这些不同的数组中,同一位置的元素是相关的。我们看例子:

运行结果:

要点:

  1. 回调函数接收的参数与传参数组一一对应,前者参数个数应少于或等于后者数组个数。
  2. 当其中一个数组包含元素较少时,调用时找不到此值,值为null。
  3. 参数数组中的key不再保留,结果数组中的key会被重新索引。

array_walk原型

array_walk原型如下:

第一个参数代表预处理的数组,以引用方式传递。第二个为回调函数,接受的参数最多有三个,第一个为数组元素的值,第二个为key(可不传递),第三个参数为可选,来自于array_walk函数的第三个参数。第三个参数为可选,可以指定用户自定义的变量。成功运行后,返回结果为true,反之false。对于回调参数中的元素值,我们以引用方式传递此值时,则可以直接修改其数组中的值,见下文。

array_walk实例

我们看一个实例:

运行结果:

我们先看第一个array_walk的调用情况。
通过引用方式传递了参数(&$city),通过赋值直接修改了其值,通过输出结果可以看到原数据内容已变化。

再看第二次调用。
在array_walk函数和回调函数的参数里,指明了第三个参数($unit),用来传递用户自定义的变量。

要点:

  1. 在回调函数中,以引用方式传参可直接修改数组元素的值。

array_map和array_walk对比

  1. 处理数组元素的值时,array_map以传值方式实现,array_walk则可以传址;即array_map将处理后的数组以结果返回,array_walk则是直接修改。
  2. 只处理一个数组时,array_map不获取也无法获取元素的key,array_walk则可以获取。

总之,适合使用array_map的场景,用其更安全。array_walk则更强大。


版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际

作者:代码可乐    发布日期:2017年7月26日


macOS Sierra有一个默认开启的新特性:在编写文字时输入两个空格,系统会自动将其转换为句号,这样很影响敲代码呢😅。取消的方法是:依次点左上角小苹果->系统偏好设置…->键盘->文本,将连按两下空格键插入句号前对勾去掉即可,见下图。


版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际

马云谈阿里未来业务方向小记

作者:代码可乐    发布日期:2017年7月23日


我最近在读《马云:未来已来》,分享下马云讲到的阿里未来业务方向。阿里的目标是为1000万家中小企业提供服务,阿里未来5-10年的业务方向如下:

  1. 传统电子商务:目标是降低商家成本、消费者获得实惠更多、物流更快。
  2. 蚂蚁金融:建立一个基于信用和大数据的互联网金融体系,为中小企业提供贷款融资服务。
  3. 菜鸟物流:还是为了解决全国范围以及全世界物流速度,希望在中国任意地区购物,24小时必达。
  4. 大数据云计算:创新离不开数据。笔者认为,阿里系的阿里云(IaaS)极大地降低了中小企业软件业务平台的基础构建成本,阿里云是未来互联网的“水和电”。
  5. 广告、跨境贸易等其它互联网服务。

版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际

我在用的付费软件推荐

作者:代码可乐    发布日期:2017年7月21日


整理一下我在用的付费软件,推荐给大家,不定期更新。

为什么要使用付费软件呢?

  1. 付费软件通常功能强大、质量佳,使用软件可以带来效率的提升。
  2. 作为程序员自己首先要尊重软件作者的劳动、付出,通过付费支持,希望大家在能力范围之内尽量支持付费软件、正版软件。

Fantastical 2

支持平台:iOS、macOS
推荐理由:一款功能强大、易用的日历管理软件。基于iCloud账号的Calendar、Reminder云端存储,将多个日历(比如生活日历、工作日历)、提醒显示在日程界面。手机和Mac双平台使用。

印象笔记(高级账户)

支持平台:iOS、macOS等
推荐理由:云端云笔记软件,重要的个人资料、技术资料存储工具。高级账号支持笔记修改历史、深度搜索。

Proxifier

支持平台:macOS、Windows
推荐理由:Proxifier可以实现对本地任意程序或域名的网络流量,转发到指定的DaiLi服务上;功能强大,支持模糊匹配等。

Day One

支持平台:macOS、iOS
推荐理由:有人喜欢用印象笔记写日记,但我强烈推荐Day One。为什么?Day One有很多针对写日记设计的功能和特性。我用它有一个特别重要的原因:使用它写完日记后,默认为只读模式,只有点编辑按钮才可以编辑,这种感觉真好,不会不小心修改了历史日记。

Airmail

支持平台:macOS、iOS
推荐理由:轻巧的邮件客户端,支持主流邮箱。

CleanMyMac

支持平台:macOS
推荐理由:功能强大的Mac清理软件,它清理范围广、精准,有效地降低垃圾文件占用,是居家必备之良品。


版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际

修改Mac登录界面语言

作者:代码可乐    发布日期:2016年12月31日


Mac登录界面语言想改成中文,但通过“系统偏好设置…”修改首选语言后不起作用。
那么可以试试命令:

详情见 https://support.apple.com/zh-cn/HT202036


版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际

WTF?忘记WP登录密码了?可以通过一行代码快速重置

作者:代码可乐    发布日期:2016年7月17日


WordPress忘记密码

  1. 通过FTP或Shell,编辑你的博客当前主题下的functions.php文件,例如/xxx/wp-content/themes/twentyfifteen/functions.php。
  2. 在文件开头处增加如下一行代码,并保存:
  3. 刷新你的博客登录页。
  4. 删除刚才增加的代码,现在可以使用新密码登录了~~~

版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际

修正树莓派使用USB键盘时井号#按键错位情况

作者:代码可乐    发布日期:2015年10月2日


当树莓派使用USB键盘时,按Shift+3无法输入井号#,按\键却输入了#号。
解决办法是
编辑文件/etc/initramfs-tools/modules

添加如下代码,并保存。

应用更改。

参考自 https://wiki.debian.org/Keyboard


版权声明:知识共享署名-非商业性使用-禁止演绎 4.0 国际