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 国际

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

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


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

添加如下代码,并保存。

应用更改。

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


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

Zend Debugger配置指南

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


Zend Debugger是什么?

简单说,Zend Debugger是Zend公司推出的一款PHP扩展,用于配合Zend Studio等PHP IDE进行代码远程(即服务端与IDE客户端通讯)调试。调试界面如下图(图片来自官方)。

debugging-and-profiling

准备工作

首先,我们要配置好本地(这里以本地开发为例)Web服务器和PHP脚本运行环境,这里就不做介绍啦。

然后,从Zend官网下载Zend Debugger扩展(页面上写有“Zend Studio Web Debugger”即是)。还可以通过“Download older versions”找到更早的版本。我们可以看到有多个下载可供选择,首先选择系统:Mac OS、Linux或Windows;然后筛选合适的PHP版本:PHP5.5/5.6或早期未标明版本;如果是Mac OS或Linux,还需要选择32位或64位(取决于系统位数),如果系统是Windows,还需要选择VC9或VC11版本(取决于PHP编译版本)。如下图。

QQ20150101-3

最后,将文件下载到本地、解压后,根据PHP版本和当前PHP是否是Thread Safe(线程安全),选择对应的扩展文件(Mac OS或Linux下后缀是so,Windows下是dll,)。如下图,“nts”代表非线程安全。

QQ20150101-2 QQ20150101-1

如何查看当前PHP是否是线程安全呢,可以通过查看PHP配置信息中“Thread Safety”得知(或者通过PHP函数phpinfo)。例如,在Mac或者Linux下,可以通过以下命令:

$ php -i | grep Thread
Thread Safety => disabled

安装扩展

首先找到PHP配置文件和扩展安装目录。

$ php -i | grep “Loaded Configuration File”
Loaded Configuration File => /usr/local/php/lib/php.ini
$ php-config | grep extension
–extension-dir [/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212]

将Zend Debugger扩展文件(比如ZendDebugger.so)拷贝到扩展目录里,然后编辑PHP配置文件,在文件末尾增加以下内容:

; 若非线程安全,使用配置项zend_extension,
; 值为扩展文件完整路径。
zend_extension=/usr/local/php/lib/php/extensions/no-debug-non-zts-20121212/ZendDebugger.so
; 若线程安全,使用配置项zend_extension_ts,
; 值为扩展文件完整路径。
zend_extension_ts=c:/xxx/xxx/ZendDebugger.dll

最后,重启Web服务器即可。

硬广:末尾附上我做的小插件NoBug


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

Outlook禁用发件时自动转换链接

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


用Outlook客户端写邮件的时候经常会遇到:本来已经手动删除超链接的网址,发信时又会自动转换为超链接。解决办法是,以Outlook 2010为例,依次点击“文件”->“选项”->“邮件”->“编辑器选项…”->“校对”->“自动更正选项…”->“自动套用格式”,不勾选“Internet及网络路径替换为超链接”,确定即可。


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